简谈Let’s Encrypt的通配符证书签发流程

Let’s Encrypt证书其实已经在网络上得到了很广泛的应用了,不过,去年宣布今年一月会释出的很刺激的功能——ACMEv2以及通配符证书,经过一拖再拖,终于,在3月18日得以真正地应用起来。

在过去,其实Let’s Encrypt已经将签发通配符证书的功能放在了staging的接口上,虽说工具链已经得到支持,但经过测试,签发的证书并不能用。现在,通配符证书正式上线,以往网络上给出了许许多多的普通证书的签发流程,就不再重复叙述了。这里大致介绍下新接口比较明显的改变吧:

  • 取消了TLS-01的验证域名的方式;
  • 提供了通配符证书签发支持;
  • 提供了内嵌在证书中的证书透明信息。

其中,提到一点就是,通配符证书的验证依据只能是DNS
本文签发过程采用acme.sh进行。

手动验证

直接运行以下命令:

acme.sh --issue --dns -d *.yourdomain.cn -d yourdomain.cn

随后就是一系列开始联网获取验证数据的过程。
稍候,命令行会返回一些类似的内容:

Add the following txt record:
Domain:_acme-challenge.yourdomain.cn
Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

然后自行在域名解析服务商中设置以下TXT记录即可。
等待DNS记录递归生效,将上面的命令再执行一次即可,然后就能比较顺利地进行通配符证书的签发。

自动验证

手动设置TXT记录其实还是不符合ACME协议的初衷,即自动化部署。但是,这时候验证只能靠DNS进行,需要使用一部分DNS服务商的API做才能达到真正地方便。

参见acme.sh的文档,如果我用的是鹅云的dnspod,就要这样子先通过环境变量设置API的Secret:

export DP_Id="xxxxx"
export DP_Key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

随后在运行命令时,--dns后面的参数加上对应的方法dns_dp,就这样运行即可:

acme.sh --issue --dns dns_dp -d *.yourdomain.cn -d yourdomain.cn

自动应用DNS记录的过程完成后,需要等待120秒再进行验证,需要耐心等待。随后的工作很轻松,等就好了。上面的Secret只需要设置一次即可,会自动保存在acme.sh的配置中。

然后,我们看看效果吧:

接下来就可以愉快地自己搭建各种CI测试项目啦哈哈哈!(误!你哪来的项目!

注意事项

  1. 记得签发时,DNS名字需要有两个:域名根域与一级通配域名;
  2. ECC证书的签发方法与原本一样,加入参数--keylength ec-256即可;
  3. 如果acme.sh不听话,更新一下即可。

发表评论

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