年轻人的第一个通配符证书!(*^_^*)
在今天,Let’s Encrypt 宣布他们已经支持了通配符证书(Wildcard Certificates),通配符证书是一个可以被多个子域使用的公钥证书,在多子域名的情况下非常方便。市面上的通配符证书大多数比较昂贵,不适合个人使用,而 Let’s Encrypt 则主推免费证书。在去年的时候宣布今年支持通配符证书,在预定发布的 2.27 为了保证更好的测试推迟了一段时间,今天终于发布了。
这篇博客就介绍一下怎么申请 Let’s Encrypt 的免费通配符证书。
下载最新的 Certbot
通配符证书需要客户端支持 ACME v2,支持 ACME v2 的客户端列表:letsencrypt.org/docs/client…。
我们使用 certbot,需要 0.22.0 版本以上的 certbot,如果版本不到 0.22.0,可以利用 pip 更新或者从 GitHub 下载:
git clone https://github.com/certbot/certbot
cd certbot
安装使用 Screen
因为申请过程中涉及到 DNS TXT 记录的更新,更新需要的时间未知,所以使用 Screen 避免等待时间过长服务器自动断开连接:
yum install -y screen
screen -S ssl
这样,如果服务器因为长时间无操作断开连接,我们只需要重新登陆服务器,然后执行:
screen -r ssl
即可恢复会话。
申请 ssl
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 的方式验证域名所有权
根据提示进行几个选择后会出现:
-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:
qqiR_lsa2AjMfoVR16mH4UDbOxy_E02l0K1CNyz1RdI
Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue
此时我们需要在自己的域名解析下添加一条 TXT 记录:
_acme-challenge.example.com
值(随机生成)是:
qqiR_lsa2AjMfoVR16mH4UDbOxy_E02l0K1CNyz1RdI
添加完成后最好等待差不多十几分钟,按下 Enter,certbot 就会验证 DNS TXT 记录是否是随机生成的 qqiR_lsa2AjMfoVR16mH4UDbOxy_E02l0K1CNyz1RdI,如果验证成功:
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2018-06-11. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
如果验证失败,可能 DNS TXT 记录没有及时更新,重试一次再多等一会儿 :)
更新 Nginx 设置
更新 Nginx 中所有子域名的配置文件,其实只需要更新其中关于 ssl 位置的两行:
ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
将原来的地址更新为申请 ssl 成功时提示的地址就行了:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
更新后:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Apache 同理。
重启 Nginx,访问网站,浏览器查看 ssl 证书: