利用acme.sh申请letsencrypt免费wildcard证书

最近一直在讨论let’s encrypt的wildcard证书什么时候出来,昨天还在想什么时候出来了要及时体验一下,没想到今早一大早起来就看到大家在讨论let’s encrypt的野卡出来了,找了个专门测试的域名以及闲置的VPS立马试了一下,记录一下测试过程。

这次和之前不一样的是,我用的是acme.sh脚本而不是certbot了,之前一直听说了这个脚本,但是都还没用过,这次趁着wildcard的支持可以试试了。
首先肯定是安装acme.sh了,来自官方的安装方法,一行命令就搞定:

curl  https://get.acme.sh | sh

一行命令就把acme.sh安装到/root/.acme.sh /下面了,虽然acme.sh会自动添加进.bashrc文件,但为了方便使用,我们最好还是source一下.bashrc文件,当然,退出SSH重新登录也可以:

source .bashrc

这样我们就能直接使用acme.sh命令了。
看文档,目前let’s encrypt的wildcard证书暂时只支持DNS验证的方式签发,所以,按照文档,我们需要利用各个DNS的API进行验证,这里是支持的各家DNS服务商的列表,根据列表找到相应的验证凭证并用export添加就好了。
由于我用的是HE的DNS,根据文档只需要用户名和密码就行了,也就两行而已:

export HE_Username="he_username"
export HE_Password="he_password"

这里有个坑就是,我之前是用keepass随机生成的密码,正好带了个!,导致export的时候老是报错,改了下密码才好。
接下来就是利用acme.sh申请wildcard了,还是按照官方的文档,格式如下:

acme.sh --issue --dns dns_he -d cloudbool.com -d *.cloudbool.com

等待时间有点长,120秒倒计时之后,发现就申请好了,申请成功之后会有提示告知证书的位置:

[Wed Mar 14 02:44:38 UTC 2018] Your cert is in  /root/.acme.sh/goov.win/goov.win.cer
[Wed Mar 14 02:44:38 UTC 2018] Your cert key is in  /root/.acme.sh/goov.win/goov.win.key
[Wed Mar 14 02:44:38 UTC 2018] The intermediate CA cert is in  /root/.acme.sh/goov.win/ca.cer
[Wed Mar 14 02:44:38 UTC 2018] And the full chain certs is there:  /root/.acme.sh/goov.win/fullchain.cer

接下来只需要将证书复制到合适的位置,然后配置Nginx就可以了,放两张图展示一下结果:
letsencrypt-wildcard-ssl-certificate
letsencrypt-wildcard-ssl-certificate