阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 7200阅读
  • 1回复

[解决方案]生成、签署 ECC 证书,Nginx 部署双证书教程

级别: 论坛版主
发帖
9349
云币
14165
— 本帖被 不靠谱贝贝 设置为精华(2016-12-26) —
前言 C|"BMam  
p\xi5z  
米饭在 15年下半年一直写的是 vobe.io 的博客,然后就废弃了。不过,在15年11月 vobe 就部署了 ECC 证书并且写了一篇教程。不过用了一星期以后就不用了,因为系统的兼容性真的差的可以,不过现在 Nginx 有了双证书功能,就解决了兼容性问题 kFCjko  
C8^=7H EB  
Ekq&.qjYG"  
目前米饭就开启了双证书解决了这个问题。 R^t )~\d  
Y"eR&d  
vpTYfE  
可见,在 XP 这样的旧平台上,用的是 RapidSSL 的 RSA 证书: <\0+*`">g  
gD$bn=  
G3 h&nH,>  
G'>?/l#  
在 macOS 10.12 Chrome 55 上就是 ECC 证书: J})#43P  
Gvo|uB#  
"l83O8 L  
除了不支持 SNI 的平台,其他平台基本上做到了全兼容: |q0MM^%"  
ZH o#2{F  
4[q'1N6-  
.Ioj]r  
介绍 p xj}%LH  
bKAR}JM&  
ry99R|/d1  
可用于 ECDHE 数字签名的算法主要有 RSA 和 ECDSA,也就是目前密钥交换 + 签名目前有三种主流的方式:
  1. RSA 密钥交换(无需签名)
  2. ECDHE 密钥交换、RSA 签名
  3. ECDHE 密钥交换、ECDSA 签名
_6Ex}`fyJ  
内置 ECDSA 公钥的证书一般被称之为 ECC 证书,内置 RSA 公钥的证书就是 RSA 证书。由于 256 位 ECC Key 在安全性上等同于 3072 位 RSA Key,加上 ECC 运算速度更快,ECDHE 密钥交换 + ECDSA 数字签名无疑是最好的选择。由于同等安全条件下,ECC 算法所需的 Key 更短,所以 ECC 证书文件体积比 RSA 证书要小一些。 I\8f`l  
K@0gBgN  
签发 m\h. sg&  
HTpoYxn(  
'Cc(}YY0C  
| .8lS3C  
目前主流的 CA 都已经支持了 ECC 证书的签发,但是几个老牌大厂支持 ECC 的证书动辄就是几千元,那还玩个蛋。 cwe@W PE2  
目前廉价或免费的 ECC 证书解决方案:
  1. Comodo 的低端证书(四级证书链接,略长)
  2. Let’s Encrypt 的免费证书(90天签发一次,签发略复杂)
O(P ,!  
SfHs,y6  
CSR 申请方法 fF~3"!1#\I  
 'Dh+v3O  
一、生成 key *jAw  
ue YBD]3'  
  1. openssl ecparam -genkey -name secp256r1 -out mf8.biz-ecc.key
a.oZ}R7'Y  
)JYt zc  
-name 参数 prime256v1 或者secp384r1。 256bit 其实安全性和速度都足够了. Y~R['u,  
g%Yw Dr=0t  
二、生成 CSR YLEk M  
  1. openssl req -new -sha256 -key vobe-io-ecc.key -out vobe-io-ecc.csr
oH[4<K>  
\5k^zGF4o  
j|WuOZm\0  
)ifEgBT  
在这里我们只需要 sha256 即可,这里之后会提问你很多问题,可以搜索一下 csr 的填写教程。 pO2Y'1*  
d8Keyi8[  
三、傻瓜 !!WSGZUR  
)v4?+$g  
Q@7-UIV|q  
一键命令: }w,^]fC:  
  1. 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=你的域名”
[CCj5N1/  
>:2Br(S  
将中文部分修改补齐即可,默认生成 256 bit 的 key 和 csr 。 |'C {nTX  
P^1+;dL,D  
2J^jSgr50d  
在线生成: )\iO wA  
https://www.chinassl.net/ssltools/generator-csr.html FIB 9W@oao  
 qac4GZ  
Let’s Encrypt 方法 c4T8eTKU  
K):MT[/"  
B{:JD^V!  
这里介绍用 acme.sh 签发,米饭也是用这货签的。 h{dR)#)GF<  
指定 --keylength ec-256 就可以将证书类型改为 ECC:
  1. acme.sh --issue -w /data/wwwroot/www.mf8.biz -d mf8.biz -d www.mf8.biz --keylength ec-256
5CSihw/5  
T8ga)BA  
双证书 [&Kn&bdKW  
$@[`/Uh   
E7XFt#P.  
目前 Nginx 1.11 mainline 版本是支持双证书的,只要大于这个版本就都可以使用双证书。其实也简单,就是把证书一份对一份做好即可。 B/*`u  
INm21MS$  
?qn0].  
  1. #RSA
  2. sslcertificate www.mf8.biz.crt;
  3. sslcertificate_key www.mf8.biz.key;
  4. #ECC
  5. sslcertificate www.mf8.biz.ecc.crt;
  6. sslcertificate_key www.mf8.biz.ecc.key;
s'&/8RR  
^,Paih 2  
不过呢 Cipher Suites 一定要配置好,不然双证书并不会生效。这里推荐 imququ 的配置: CC(At.dd  
  1. 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;
_x.!, g{  
+/g/+B_b  
注: 一定要重启 Nginx 才会生效哟! qRD]Q  
.?gpI Zv  
https://www.mf8.biz/ecc-nginx-double-cert/ SA5 g~{"  
[ 此帖被ivmmff在2017-03-18 20:34重新编辑 ]
本帖最近评分记录: 1 条评分 云币 +10
鬼才神兵 云币 +10 优秀文章-欢迎进行技术分享,感谢你的支持! 2017-01-04
级别: 论坛版主
发帖
1784
云币
3327

只看该作者 沙发  发表于: 2017-01-04
优秀文章-欢迎进行技术分享,感谢你的支持!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
验证问题: 56 - 39 = ?
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)