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

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

级别: 论坛版主
发帖
9349
云币
14165
— 本帖被 不靠谱贝贝 设置为精华(2016-12-26) —
前言 :/+>e IE  
D9ANm"#  
米饭在 15年下半年一直写的是 vobe.io 的博客,然后就废弃了。不过,在15年11月 vobe 就部署了 ECC 证书并且写了一篇教程。不过用了一星期以后就不用了,因为系统的兼容性真的差的可以,不过现在 Nginx 有了双证书功能,就解决了兼容性问题 5^\m`gS  
TbOJp  
m&Lt6_vi  
目前米饭就开启了双证书解决了这个问题。 "37*A<+f  
5v"Y\k+1  
{5>3;.  
可见,在 XP 这样的旧平台上,用的是 RapidSSL 的 RSA 证书: :]'q#$!  
t)LU\!  
 1Yud~[c  
z;J  
在 macOS 10.12 Chrome 55 上就是 ECC 证书: tyB)HF  
1YFeVMc  
D-6  
除了不支持 SNI 的平台,其他平台基本上做到了全兼容: i<mevL  
`aIG;@Z  
~P/]:=  
Vn'?3Eb<  
介绍 >rKhlUD  
N r<9u$d9=  
?1CJf>B>  
可用于 ECDHE 数字签名的算法主要有 RSA 和 ECDSA,也就是目前密钥交换 + 签名目前有三种主流的方式:
  1. RSA 密钥交换(无需签名)
  2. ECDHE 密钥交换、RSA 签名
  3. ECDHE 密钥交换、ECDSA 签名
x@Y|v@}BE  
内置 ECDSA 公钥的证书一般被称之为 ECC 证书,内置 RSA 公钥的证书就是 RSA 证书。由于 256 位 ECC Key 在安全性上等同于 3072 位 RSA Key,加上 ECC 运算速度更快,ECDHE 密钥交换 + ECDSA 数字签名无疑是最好的选择。由于同等安全条件下,ECC 算法所需的 Key 更短,所以 ECC 证书文件体积比 RSA 证书要小一些。 NEMEY7De2  
hcyn  
签发 EY~7oNfc`R  
AuAT]`  
u#FXW_-TK  
`_GO=QQ  
目前主流的 CA 都已经支持了 ECC 证书的签发,但是几个老牌大厂支持 ECC 的证书动辄就是几千元,那还玩个蛋。 bo1I&I  
目前廉价或免费的 ECC 证书解决方案:
  1. Comodo 的低端证书(四级证书链接,略长)
  2. Let’s Encrypt 的免费证书(90天签发一次,签发略复杂)
G]-%AO{K  
;}D-:J-z_  
CSR 申请方法 &mcR   
';6X!KY+]  
一、生成 key >yKpM }6l{  
2 5Q+1  
  1. openssl ecparam -genkey -name secp256r1 -out mf8.biz-ecc.key
r{S=Z~J  
i j/o;_  
-name 参数 prime256v1 或者secp384r1。 256bit 其实安全性和速度都足够了. KzG_ <<  
ra]:$XJ5=a  
二、生成 CSR @^!\d#/M  
  1. openssl req -new -sha256 -key vobe-io-ecc.key -out vobe-io-ecc.csr
:G}DAUFN  
/'4Q{8.a  
^X &)'H  
oIb) Rq!m  
在这里我们只需要 sha256 即可,这里之后会提问你很多问题,可以搜索一下 csr 的填写教程。 -2 x E#r  
6.'$EtH  
三、傻瓜 Hd 0Xx}3&  
Fc'[+L--Q  
 P?J kP  
一键命令: ]G*$W+G]  
  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=你的域名”
C_G1P)k  
YBvd q1  
将中文部分修改补齐即可,默认生成 256 bit 的 key 和 csr 。 ~C| ,b"  
:tLbFW[  
BI.V0@qZ  
在线生成: G3dh M#!  
https://www.chinassl.net/ssltools/generator-csr.html <tuS,.  
uN bIX:L,  
Let’s Encrypt 方法 B+46.bIH  
:B.G)M\  
b[srG6{ &  
这里介绍用 acme.sh 签发,米饭也是用这货签的。 io2@}xZF  
指定 --keylength ec-256 就可以将证书类型改为 ECC:
  1. acme.sh --issue -w /data/wwwroot/www.mf8.biz -d mf8.biz -d www.mf8.biz --keylength ec-256
U5<@<j(@  
q- :4=vkn  
双证书 a#y{pT2 b  
-:S IS`0s  
} 0;Sk(B>  
目前 Nginx 1.11 mainline 版本是支持双证书的,只要大于这个版本就都可以使用双证书。其实也简单,就是把证书一份对一份做好即可。 "PzP; Br  
JIxiklk  
bSrZ{l  
  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;
GNU;jSh5  
c'0 5{C  
不过呢 Cipher Suites 一定要配置好,不然双证书并不会生效。这里推荐 imququ 的配置: _{Y$o'*#I  
  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;
yM ,VrUh  
C:GvP>  
注: 一定要重启 Nginx 才会生效哟! ~`R1sSr"  
k1fRj_@WPT  
https://www.mf8.biz/ecc-nginx-double-cert/ KlU qoJ;"  
[ 此帖被ivmmff在2017-03-18 20:34重新编辑 ]
本帖最近评分记录: 1 条评分 云币 +10
鬼才神兵 云币 +10 优秀文章-欢迎进行技术分享,感谢你的支持! 2017-01-04
级别: 论坛版主
发帖
1784
云币
3327

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

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)