前言
2017年绝对是移动互联网的加密元年,越来越多的移动互联网网站、应用会部署 HTTPS 加密,不过移动平台因为普遍基于 ARM 架构所以对处理 HTTPS 的性能和速度都不如电脑平台。因此我们就需要部署更短、更快和更安全的 ECC 证书来实现移动平台的 HTTPS 的加密解密高效化。
其实米饭在 15年下半年一直写的是 vobe.io 的博客,然后就废弃了。不过呢,在15年11月 vobe 就部署了 ECC 证书并且写了一篇教程。不过用了一星期以后就不用了,因为系统的兼容性真的差的可以,不过现在 Nginx 有了双证书功能,就解决了兼容性问题。
目前米饭就开启了双证书解决了这个问题。
可见,在 XP 这样的旧平台上,用的是 RapidSSL 的 RSA 证书:
在 macOS 10.12 Chrome 55 上就是 ECC 证书:
除了不支持 SNI 的平台,其他平台基本上做到了全兼容:
介绍
椭圆曲线密码学(Elliptic curve cryptography,缩写为ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学,其更适合于移动互联网,有更好的安全性和更好的性能。ECC加密算法 1985年 提出,到 2005 年才在各种操作系统中获得广泛支持,2015 年开始被普遍性的部署。
可用于 ECDHE 数字签名的算法主要有 RSA 和 ECDSA,也就是目前密钥交换 + 签名目前有三种主流的方式:
RSA 密钥交换(无需签名)
ECDHE 密钥交换、RSA 签名
ECDHE 密钥交换、ECDSA 签名
内置 ECDSA 公钥的证书一般被称之为 ECC 证书,内置 RSA 公钥的证书就是 RSA 证书。由于 256 位 ECC Key 在安全性上等同于 3072 位 RSA Key,加上 ECC 运算速度更快,ECDHE 密钥交换 + ECDSA 数字签名无疑是最好的选择。由于同等安全条件下,ECC 算法所需的 Key 更短,所以 ECC 证书文件体积比 RSA 证书要小一些。
签发
目前主流的 CA 都已经支持了 ECC 证书的签发,但是几个老牌大厂支持 ECC 的证书动辄就是几千元,那还玩个蛋。
目前廉价或免费的 ECC 证书解决方案:
- Comodo 的低端证书(四级证书链接,略长)
- Let’s Encrypt 的免费证书(90天签发一次,签发略复杂)
CSR 申请方法
一、生成 key
openssl ecparam -genkey -name secp256r1 -out mf8.biz-ecc.key
-name 参数 prime256v1 或者secp384r1。 256bit 其实安全性和速度都足够了.
二、生成 CSR
openssl req -new -sha256 -key vobe-io-ecc.key -out vobe-io-ecc.csr
在这里我们只需要 sha256 即可,这里之后会提问你很多问题,可以搜索一下 csr 的填写教程。
三、傻瓜
一键命令:
openssl ecparam -out 你的域名.ecc.pkey -name secp256r1 -genkey && openssl req -new -key 你的域名.ecc.pkey -sha256 -nodes -out 你的域名.ecc.csr -subj “/C=CN/ST=省份/L=城市/O=组织/OU=组织单位/部门/分支/CN=你的域名”
将中文部分修改补齐即可,默认生成 256 bit 的 key 和 csr 。
在线生成:
https://www.chinassl.net/ssltools/generator-csr.html
Let’s Encrypt 方法
这里介绍用 acme.sh 签发,米饭也是用这货签的。
指定 --keylength ec-256
就可以将证书类型改为 ECC:
acme.sh --issue -w /data/wwwroot/www.mf8.biz -d mf8.biz -d www.mf8.biz --keylength ec-256
Nginx 双证书
Apache Httpd 教程:https://bbs.mf8.biz/ecc-httpd-double-cert/
目前 Nginx 1.11 mainline 版本是支持双证书的,只要大于这个版本就都可以使用双证书。其实也简单,就是把证书一份对一份做好即可。
#RSA sslcertificate www.mf8.biz.crt; sslcertificate_key www.mf8.biz.key; #ECC sslcertificate www.mf8.biz.ecc.crt; sslcertificate_key www.mf8.biz.ecc.key;
不过呢 Cipher Suites 一定要配置好,不然双证书并不会生效。这里推荐 imququ 的配置:
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;
注: 一定要重启 Nginx 才会生效哟!
沙发,留个爪
欢迎哟~
哈哈哈,前几天还在问你,果然就出了。
是的呢,因为的确没啥新的可以写的了。
你的名字很熟悉 曾经咱们是不是在哪里有交集呢?好久了忘记了…
母鸡诶~ 我貌似还没有认识的 ios 开发者~