生成、签署 ECC 证书,Nginx 部署双证书教程
本文最后更新于 2671 天前,其中的信息可能已经有所发展或是发生改变。

前言

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,也就是目前密钥交换 + 签名目前有三种主流的方式:

  1. RSA 密钥交换(无需签名)
  2. ECDHE 密钥交换、RSA 签名
  3. ECDHE 密钥交换、ECDSA 签名

内置 ECDSA 公钥的证书一般被称之为 ECC 证书,内置 RSA 公钥的证书就是 RSA 证书。由于 256 位 ECC Key 在安全性上等同于 3072 位 RSA Key,加上 ECC 运算速度更快,ECDHE 密钥交换 + ECDSA 数字签名无疑是最好的选择。由于同等安全条件下,ECC 算法所需的 Key 更短,所以 ECC 证书文件体积比 RSA 证书要小一些。

签发

目前主流的 CA 都已经支持了 ECC 证书的签发,但是几个老牌大厂支持 ECC 的证书动辄就是几千元,那还玩个蛋。

目前廉价或免费的 ECC 证书解决方案:

  1. Comodo 的低端证书(四级证书链接,略长)
  2. 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 才会生效哟!

评论

  1. 7年前
    2016-12-15 11:41:02

    沙发,留个爪

    • 妙正灰
      博主
      企业咨询
      7年前
      2016-12-15 12:51:53

      欢迎哟~

  2. 7年前
    2016-12-15 14:02:27

    哈哈哈,前几天还在问你,果然就出了。

    • 妙正灰
      博主
      Vans爱好者
      7年前
      2016-12-15 16:01:35

      是的呢,因为的确没啥新的可以写的了。

  3. 7年前
    2016-12-22 0:50:15

    你的名字很熟悉 曾经咱们是不是在哪里有交集呢?好久了忘记了…

    • 妙正灰
      博主
      ian
      7年前
      2016-12-22 13:08:16

      母鸡诶~ 我貌似还没有认识的 ios 开发者~

本文评论已关闭
上一篇
下一篇