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

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

级别: 论坛版主
发帖
9349
云币
14165
— 本帖被 不靠谱贝贝 设置为精华(2016-12-26) —
前言 f!EOYowW  
(< :mM  
米饭在 15年下半年一直写的是 vobe.io 的博客,然后就废弃了。不过,在15年11月 vobe 就部署了 ECC 证书并且写了一篇教程。不过用了一星期以后就不用了,因为系统的兼容性真的差的可以,不过现在 Nginx 有了双证书功能,就解决了兼容性问题 rI *!"PL  
[~!.a\[RW  
K:uQ#W.&  
目前米饭就开启了双证书解决了这个问题。 gUu&Vy\  
[' ?^>jfr  
t(wZiK}  
可见,在 XP 这样的旧平台上,用的是 RapidSSL 的 RSA 证书: JR!Q,7S2!N  
&+,:u*%  
|$Qp0vOA}  
|1lf(\T_  
在 macOS 10.12 Chrome 55 上就是 ECC 证书: i]LU4y %'  
\ hrBq^I  
%l%=Dkss  
除了不支持 SNI 的平台,其他平台基本上做到了全兼容: >eEnQ}Y  
)CFk`57U  
Ko4)0&  
N/(ofy  
介绍 v*smI7aH  
f 5mY;z"  
i0VhG :O;  
可用于 ECDHE 数字签名的算法主要有 RSA 和 ECDSA,也就是目前密钥交换 + 签名目前有三种主流的方式:
  1. RSA 密钥交换(无需签名)
  2. ECDHE 密钥交换、RSA 签名
  3. ECDHE 密钥交换、ECDSA 签名
Av@& hD\  
内置 ECDSA 公钥的证书一般被称之为 ECC 证书,内置 RSA 公钥的证书就是 RSA 证书。由于 256 位 ECC Key 在安全性上等同于 3072 位 RSA Key,加上 ECC 运算速度更快,ECDHE 密钥交换 + ECDSA 数字签名无疑是最好的选择。由于同等安全条件下,ECC 算法所需的 Key 更短,所以 ECC 证书文件体积比 RSA 证书要小一些。 l&\t f`~  
o*?[_{x W  
签发 2;3x,<Cg  
0W;q!H[G  
RA#\x.  
dko[  
目前主流的 CA 都已经支持了 ECC 证书的签发,但是几个老牌大厂支持 ECC 的证书动辄就是几千元,那还玩个蛋。 2;dM:FHLhO  
目前廉价或免费的 ECC 证书解决方案:
  1. Comodo 的低端证书(四级证书链接,略长)
  2. Let’s Encrypt 的免费证书(90天签发一次,签发略复杂)
}m9S(Wal  
!&'# a  
CSR 申请方法 u4go*#  
x&QNP  
一、生成 key >oVc5}  
Fsnw3/Nr  
  1. openssl ecparam -genkey -name secp256r1 -out mf8.biz-ecc.key
V#p G; ,  
zfM<x,XdY  
-name 参数 prime256v1 或者secp384r1。 256bit 其实安全性和速度都足够了. Tbe_x s^  
dVasm<lZ  
二、生成 CSR 7~nIaT  
  1. openssl req -new -sha256 -key vobe-io-ecc.key -out vobe-io-ecc.csr
QWU5-p9e8  
sZ0g99eX  
\a{Aa  
|U8>:DEl  
在这里我们只需要 sha256 即可,这里之后会提问你很多问题,可以搜索一下 csr 的填写教程。 Z)C:]}Ex  
_bN))9 3  
三、傻瓜 p=:7 atE  
$xKg }cO  
:7HVBH  
一键命令: *uk \O]  
  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=你的域名”
-0=}|$H.  
0S)"Q^6n y  
将中文部分修改补齐即可,默认生成 256 bit 的 key 和 csr 。 sV9{4T~#|  
zv$=*  
j<. <S {  
在线生成: 'DaNR`9  
https://www.chinassl.net/ssltools/generator-csr.html O^QR;<t'  
;`X`c  
Let’s Encrypt 方法 GE/IaLo  
V Z4nAG  
(H|%?F;{l  
这里介绍用 acme.sh 签发,米饭也是用这货签的。 umq$4}T '$  
指定 --keylength ec-256 就可以将证书类型改为 ECC:
  1. acme.sh --issue -w /data/wwwroot/www.mf8.biz -d mf8.biz -d www.mf8.biz --keylength ec-256
)?= kb  
7)ES!C   
双证书 |q1b8A\  
e8WPV  
r9p?@P\:[  
目前 Nginx 1.11 mainline 版本是支持双证书的,只要大于这个版本就都可以使用双证书。其实也简单,就是把证书一份对一份做好即可。 `Gy>tD.#V-  
;ph+ZV  
JCCx 5  
  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;
YyX^lL_  
cG~_EX$  
不过呢 Cipher Suites 一定要配置好,不然双证书并不会生效。这里推荐 imququ 的配置: $=;bccIob  
  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;
VfJX<e=k  
S[\cT:{OE  
注: 一定要重启 Nginx 才会生效哟! g%<{G/Tz  
ynOc~TN  
https://www.mf8.biz/ecc-nginx-double-cert/ hs -}:^S`  
[ 此帖被ivmmff在2017-03-18 20:34重新编辑 ]
本帖最近评分记录: 1 条评分 云币 +10
鬼才神兵 云币 +10 优秀文章-欢迎进行技术分享,感谢你的支持! 2017-01-04
级别: 论坛版主
发帖
1784
云币
3327

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

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)