使用acme.sh签发并使用Let’s Encrypt的EC证书

acme.sh是一个国人编写的、基于ACME协议的第三方的Let’s Encrypt证书管理工具.使用它签发EC证书较为简单.

1.使用Webroot模式签发证书

  1. 此方法依赖于运行中的http服务器(e.g. Apache httpd/Nginx),运行脚本前不要停止http服务器.
  2. Web根目录要对你当前登陆ssh的用户可写,因为acme.sh要在-w指定的目录下创建.well-known/文件夹并在其中创建文件,以验证域名所有权
  3. 可以通过多个-d指定多个域名,签发多域名证书
  4. ★重要:如使用此方法签发多域名证书,上一条所述的多域名在http服务器的vHost中必须设置相同的Web根目录,且为-w所指定的路径.一般而言,如同时签发domain.tld和www.domain.tld时可以这样做;而domain.tld和mail.domain.tld则不能,因为其不在同一个vHost下。

2.使用Standalone模式签发证书

  1. 对于单域名或多个Web目录相同的域名也可这样签发证书.
  2. 运行前务必停止[包括但不限于http服务器]的任何监听80端口的服务;如不确定80端口是否被占用,可使用netstat -lp|grep 80查看.
  3. 无需使用-w指定Web根目录.
  4. 所有由-d指定的多域名都需要解析到运行acme.sh的主机.

另注:-k能指定的所有公钥类型:

  1. -k {2048|3072|4096} 使用2048/3072/4096位的RSA密钥对.
  2. -k {ec-256|ec-384} 使用256/384位的EC密钥对.


3.使用EC证书

Apache httpd

Nginx

重载http服务器

但是很快便发现,访问网站时浏览器和操作系统均支持ECDSA,仍会使用ECDHE_RSA密钥交换,而未使用ECDHE_ECDSA。这是OpenSSL默认的加密套件顺序中,ECDHE_RSA_*排在ECDHE_ECDSA_*前面造成的.所以要做如下修改,不能继续使用如HIGH:!aNULL这样的形式

再次重载Apache httpd或Nginx,支持ECDSA的设备优先使用ECDHE_ECDSA_*的加密套件,便达到ECDSA+RSA双证书的目的.


备注:

  1. 使用AESGCM:HIGH:3DES:+aRSA:+kRSA:!aNULL时,加密套件顺序大体如下:
    1. ECDHE+ECDSA+AESGCM
    2. ECDHE+ECDSA+AES(CBC)
    3. ECDHE+RSA+AESGCM
    4. ECDHE+RSA+AES(CBC)
    5. DHE+RSA+AESGCM
    6. DHE+RSA+AES(CBC)
    7. DHE+RSA+CAMELLIA(CBC)
    8. RSA+AESGCM
    9. RSA+AES(CBC)
    10. RSA+CAMELLIA(CBC)
  2. RSA、EC与对称加密强度等效(EC-512bit不被主流浏览器支持)
     对称加密(e.g. AES) RSA EC
     128 bits  3072 bit  256 bit
     192 bits  7860 bit  384 bit
     256 bits  15360 bit  512 bit

发表评论

电子邮件地址不会被公开。