Let’s Encrypt 通配符证书申请+使用双证书

之前的数字证书都是使用RSA的,现在有新的一种签名算法:ECDSA,使用ECDSA算法签名的数字证书也叫做ECC证书。

ECC证书的好处

使用ECC证书中有用户公钥,相比于之前RSA证书而言,256位ECC key就能起到相当于3072位的RSA key的安全性。另外一点就是ECC的运算速度相对以同等安全性的RSA的速度要快上很多,这样就可以减少服务器的资源开销,并且ECC证书证书文件会比RSA证书文件要小上很多。

现在Let’s Encrypt的兼容性也挺高的,Let’s Encrypt 由 ISRG(Internet Security Research Group,互联网安全研究小组)提供了免费、自动化、开放的证书签发服务,虽然证书只有 90 天有效期,但可以通过定时脚本更新,目前acme.sh项目挺方便的,它是一个实现 ACME 协议的客户端,能够向支持 ACME 协议的 CA 申请证书(如 Letsencrypt)。 最重要的是它对接了大多数的域名服务商,能够通过域名服务商提供的 API,自动的添加 DNS 验证记录进行全自动颁发证书,还可以模拟 HTTP 服务器进行文件验证。so,不管你的证书期限是 90 天,还是更短,再也不用担心证书过期的问题了。
至于 ACME 协议是什么?Automatic Certificate Management Environment 自动化证书管理环境,通过它我们可以实现证书的自动申请以及部署,可以大大的节省人员的管理及额外的配置工作。
好了,废话不多说。

安装 acme.sh

acme.sh 下载非常的简单,官方提供了 2 中方式:

  1. 通过执行在线脚本安装:
  2. 通过 git 安装:

在安装的过程中,做了 3 件事:

  • 复制 acme.sh 到你的 HOME 目录($HOME):~/.acme.sh/。之后所有生成的证书也会放在这里。
  • 创建别名:
  • 创建 cron 每日任务去检查是否有证书需要更新。 如:
  • 使用 acme.sh

    如何使用?acme.sh 的功能非常的强大,使用方式确非常的简单。提醒,该脚本需要在你的服务器下执行。官方地址:How to issue a cert
    关于 ECC 证书,你只需要再末尾添加 –keylength ec-256。如:

    可选长度有:

  • ec-256 (prime256v1, “ECDSA P-256”)
  • ec-384 (secp384r1, “ECDSA P-384”)
  • ec-521 (secp521r1, “ECDSA P-521”, which is not supported by Let’s Encrypt yet.)
  • 具体的大家可以参考上面的官方说明

    申请通配符证书

    首先我们需要确认你使用的是什么DNS服务商,只有在DNSapi上的才支持添加通配符证书。
    我们已CloudFlare为例

    本人使用以下命令生成证书

    安装证书

    再颁发证书之后,我们可能需要将证书拷贝到指定位置。那么我们需要使用到 –install-cert 命令,请尽量避免手动拷贝证书。

    这里会将私钥、证书、证书链拷贝到指定位置,成功后执行 –reloadcmd 命令。请确保有执行这些命令的权限。
    当然你也不用担心证书更新的问题,在证书 60 天之后,会自动更新,更新后就会执行 –reloadcmd 的命令。
    这里还有一些 hook 功能,请查看帮助 $ acme.sh -h,如,–renew-hook(每次证书成功更新后执行的命令)等。

    更新证书

    使用该工具的应该都是冲着其强大的自动更新部署功能来的。当然,如果你想手动更新:

    如何部署双证书

    因为我使用的是Nginx,所以这里就只讲Nginx的部署。
    重要提示:Nginx只有在版本1.11以后(包括1.11)才支持部署双证书,所以版本不够的同学需要先升级Nginx,可以使用nginx -V查看。
    准备好RSA和ECC两套证书和私钥文件,然后在配置文件中添加:

    有一点需要注意,如果希望默认使用ECC证书需要把ECDSA套件添加在前面,例如ECDHE_ECDSA的套件放在前面,如果不这样做的话,配置的加密套件最优先的RSA加密套件,那么会默认使用RSA的证书。当这些完成后,就可以使用ssllabs或者myssl去检测一下双证书的部署状况了。

    测试结果

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注