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测试项目啦哈哈哈!(误!你哪来的项目!
注意事项
- 记得签发时,DNS名字需要有两个:域名根域与一级通配域名;
- ECC证书的签发方法与原本一样,加入参数
--keylength ec-256
即可; - 如果acme.sh不听话,更新一下即可。