介绍
在通讯过程中,HTTPS 借助 TLS/SLL 和证书机制确保了通讯数据的保密性、真实性、完整性。TSL/SSL 在加密过程中需要用到对称内容加密和非对称密钥交换两种算法。
常见的非对称密钥交换算法有基于整数因式分解问题的RSA和基于椭圆曲线离散对数问题(ECDLP)的ECDHE两种。ECDHE 和 RSA 相比,前者密钥长度更短,计算速度高,耗费的资源更少,且支持PFS(Perfect Forward Secrecy);但并不是所有浏览器都支持 ECDHE,也就是 ECC 证书在兼容性方面不如 RSA 证书。
Android 需要 Android 4+ 才支持
Nginx 1.11.0 开始会根据 CipherSuite 返回不同的证书,如果支持 ECDSA,则发送 ECC 证书给浏览器;如果不支持,则发送 RSA 证书。
考虑到网站的更好的体验,为了尝试 ECC 证书,将 Nginx 升级到最新版,准备开启双证书之旅。
配置 Nginx
修改 Nginx 配置文件,添加 ECC 证书路径并调整 Ciphers,最后重启 Nginx。
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5;
# RSA Certificate
ssl_certificate /home/ssl/server.crt;
ssl_certificate_key /home/ssl/server.key;
# ECC Certificate
ssl_certificate /home/ssl/server.ecc.cer;
ssl_certificate_key /home/ssl/server.ecc.key;
以上配置根据网站具体情况配置
证书检测
可以使用MYSSL进行检测