HTTPS加密算法比较,ECC胜出(附自签方法)
HTTPS就是HTTP over SSL,大白话说就是SSL加密的HTTP。
由于HTTPS属于公共传输,所以至少用到一个非对称加密。
目前常见的算法按从高到低:
ECC
AES+RSA
RSA
DES+RSA
其中类似AES+RSA就是不完全对称加密,只将密钥用RSA加密,而密文用AES这种高效的加密方式。
如此相比传统的全文用RSA加密有更高速等优势,在ECC这类算法出现前是一个不错的中和方案。
ECC出现后,有芯片开发网站将其效率与RSA进行了对比,结果显然ECC更胜一筹:
ECC的缺点是很多浏览器和客户端并不兼容,相信广泛普及后能够解决这一问题。
ECC的浏览器兼容性:
ECC | SNI | ||
---|---|---|---|
操作系统 | Microsoft Windows | Vista+ | Vista+ |
Apple MacOS | 10.6+ | 10.5+ | |
Apple iOS | 7+ | 8+ | |
Google Android | 4.0+ | 3.0+ | |
浏览器 | Microsoft Internet Explorer | 7+ | 7+ |
Mozilla Firefox | 2.0+ | 2.0+ | |
Google Chrome | 1.0+ | 6.0+ | |
Apple Safari | 4+ | 3+ |
https://developer.qiniu.com/ssl/manual/3659/ssl-compatibility-test-report
ACME.SH生成ECC加密的Let's Encrypt证书:
https://github.com/Neilpang/acme.sh#10-issue-ecc-certificates
附ECC自签名证书生成方法:(一般用于内网加密通讯或CDN)
openssl ecparam -out privatekey.key -name prime256v1 -genkey
openssl req -new -key privatekey.key -out request.csr -sha256
openssl x509 -req -days 3650 -in /www/ssl.csr -signkey /www/ssl.key -out /www/ssl.crt
然后在Nginx网站配置的server段加入:
listen 443 ssl;
ssl_certificate /www/ssl.crt;
ssl_certificate_key /www/ssl.key;
如果看不懂的话,简单地说就是ECC提升了加密速度,并且更省资源,网页打开更快。
我的内网服务器已经部署ECC证书了,效率同比之前的RSA提升很大,抓取延迟小了很多。
只可惜目前所有网站对外默认的Lets encrypt还没有更换ECC加密,因为要考虑到兼容性问题。