这是之前我在转用 Amazon CloudFront 的时候,遇到的一个问题,我用的是 Custom origin,是以本站的原始服务器作为源,没有使用 Amazon 的 S3。当配置完成 CDN 生效后,在访问的时候出现了 502 错误,显示 cloudfront cannot connect to origin。
在仔细检查后,发现了问题,其实在一年前或者更久之前已经遇到过这个坑了。
那就是 Amazon CloudFront 只支持有限的几个加密协议。而恰巧本站当时的加密协议中没有这几个。
Amazon CloudFront 要求的加密算法:
- ECDHE-RSA-AES128-SHA
- ECDHE-RSA-AES256-SHA
- AES256-SHA
- AES128-SHA
- DES-CBC3-SHA
- RC4-MD5
源服务器必须支持上面的任意一种,来建立 SSL 连接。
我的服务器之前是使用椭圆曲线算法,支持的加密协议没有包括上面的。
为了修复这个问题,我重新签发了证书,新签了一个 RSA 的证书,然后在 Nginx 配置文件里,使用了双证书。
同时使用了 ECC 和 RSA 的证书。然后修改了加密算法协议。
重新载入 Nginx 服务器后,就好了。
用 SSLLab 服务器测试工具,可以看到下面所支持的加密算法套件。
- ECDHE-RSA-AES128-SHA
- ECDHE-RSA-AES256-SHA
备注:
- Nginx 从 1.11.0 版本后开始支持 双证书的。 参见 https://community.centminmod.com/dualsslcerts
- CloudFront 的加密算法说明
- AWS 关于源服务器连接问题的解决办法