目前大多数网站使用的都是基于RSA 非对称加密算法签发的证书,而在部署加密协议后服务器开销亦会增加。
对大型网站而言如果有能够降低服务器开销的方法那自然也得用上,所以现在很多网站也开始使用ECC 证书。
基于ECC算法签发证书相对RSA证书占用更低的服务器开销,不过在兼容性方面RSA 证书则更优于ECC 证书。
于是现在很多大型网站例如谷歌搜索、天猫等开始使用ECC / RSA 双加密证书来确保兼容性的同时降低开销。
ECC证书的兼容性如何?
按现有系统的采用份额来看ECC证书只影响 Windows XP 系统,该系统既不支持SHA256也不支持ECC算法。
同时如果仍然在使用Android 4.0及以下版本亦不支持ECC证书,因此采用 ECC/RSA双证书可保证兼容需求。
但请注意:对于 Windows XP SP3 以下系统仍然不支持 SHA256 算法,所以即便是采用双证书也不能兼容。
题外话:目前国内多家主流的CDN提供商都还没有支持ECC/RSA 双加密证书,所以用CDN的话那就再等等。
如何申请ECC加密证书:
目前主流证书颁发机构都已经支持签发ECC证书,同时对于单域名免费证书来说我们仍然可以申请ECC 证书。
免费证书里Lets Encrypt及TrustAsia提供的免费证书均支持ECC证书,用户也可通过合作平台申请ECC 证书。
蓝点网此前已发布通过七牛云存储申请免费证书的详细流程,用户可在申请时选择ECC算法来获取ECC 证书。
申请下来的ECC证书截图如下:
在证书的详细信息里面可以看到签名算法是SHA256ECDSA,而目前主流的 RSA 证书签名算法为 SHA256。
在Nginx上部署ECC/RSA双加密证书:
为解决兼容问题Nginx已经在 v1.11.x 及以上版本支持双加密证书,因此我们只需要修改配置文件增加即可。
### 为方便查看、以下配置参数中与本文无关的内容已经移除 server { listen 443 ssl http2; #listen [::]:443 ssl http2; server_name www.cncros.com cncros.com; index index.html index.htm index.php default.html default.htm default.php; ssl on; #增加ECC证书和私钥的完整路径 ssl_certificate /usr/local/nginx/conf/vhost/crt/www.cncros.com.ecdsa.crt; ssl_certificate_key /usr/local/nginx/conf/vhost/crt/www.cncros.com.ecdsa.key; #这是原本使用的RSA证书和私钥完整路径 ssl_certificate /usr/local/nginx/conf/vhost/crt/www.cncros.com.rsa.crt; ssl_certificate_key /usr/local/nginx/conf/vhost/crt/www.cncros.com.rsa.key; #开启SSL Ciphers ssl_prefer_server_ciphers on; #配置SSL Ciphers加密算法参数 ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5"; }
将网站的配置文件修改完成后保存并上传服务器, 然后重启 Nginx 如果没有报错的话那就已经顺利部署啦。
在浏览器和检测工具中测试看看:
谷歌浏览器开发者模式的安全控制台里我们可以看到部署的情况:使用ECDHE_RSA P-256强密钥交换协议。
使用MySSL在线检测HTTPS状态也可以看到加密算法为ECDSA 256位,除ECC证书外也可以检测到RSA证书。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/31401.html