年轻人的第一个通配符证书!(*^_^*)
在今天,Let’s Encrypt 宣布他们已经支持了通配符证书(Wildcard Certificates),通配符证书是一个可以被多个子域使用的公钥证书,在多子域名的情况下非常方便。市面上的通配符证书大多数比较昂贵,不适合个人使用,而 Let’s Encrypt 则主推免费证书。在去年的时候宣布今年支持通配符证书,在预定发布的 2.27 为了保证更好的测试推迟了一段时间,今天终于发布了。
这篇博客就介绍一下怎么申请 Let’s Encrypt 的免费通配符证书。
下载最新的 Certbot
通配符证书需要客户端支持 ACME v2,支持 ACME v2 的客户端列表:https://letsencrypt.org/docs/client-options/。
我们使用 certbot,需要 0.22.0
版本以上的 certbot,如果版本不到 0.22.0
,可以利用 pip 更新或者从 GitHub 下载:
1 | git clone https://github.com/certbot/certbot |
安装使用 Screen
因为申请过程中涉及到 DNS TXT 记录的更新,更新需要的时间未知,所以使用 Screen 避免等待时间过长服务器自动断开连接:
1 | yum install -y screen |
这样,如果服务器因为长时间无操作断开连接,我们只需要重新登陆服务器,然后执行:
1 | screen -r ssl |
即可恢复会话。
申请 ssl
1 | sudo ./certbot-auto certonly --manual -d *.example.com -d example.com --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory |
注意:
-d
选项后是你要申请通配符证书的域名- 通配符证书的申请必须使用 DNS TXT 的方式验证域名所有权
根据提示进行几个选择后会出现:
1 | ------------------------------------------------------------------------------- |
此时我们需要在自己的域名解析下添加一条 TXT 记录:
1 | _acme-challenge.example.com |
值(随机生成)是:
1 | qqiR_lsa2AjMfoVR16mH4UDbOxy_E02l0K1CNyz1RdI |
添加完成后最好等待差不多十几分钟,按下 Enter,certbot 就会验证 DNS TXT 记录是否是随机生成的 qqiR_lsa2AjMfoVR16mH4UDbOxy_E02l0K1CNyz1RdI
,如果验证成功:
1 | Waiting for verification... |
如果验证失败,可能 DNS TXT 记录没有及时更新,重试一次再多等一会儿 :)
更新 Nginx 设置
更新 Nginx 中所有子域名的配置文件,其实只需要更新其中关于 ssl 位置的两行:
1 | ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem; |
将原来的地址更新为申请 ssl 成功时提示的地址就行了:
1 | IMPORTANT NOTES: |
更新后:
1 | ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; |
Apache 同理。
重启 Nginx,访问网站,浏览器查看 ssl 证书: