用Certbot申请Let's Encrypt野卡证书
网上看了很多关于申请Let's Encrypt野卡(wildcard)证书的教程,但很多感觉各种复杂,在我服务器上也没能正常运作,最后还是去看了官方推荐的certbot工具的文档终于找到了相对简单可靠的申请方式,在这里分享一下。
测试环境是Ubuntu Server 16.04 x64。
安装Certbot
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot python-certbot-nginx
安装certbot-dns-cloudflare插件
野卡(wildcard)证书需要进行dns-01
挑战,certbot官方提供了主流DNS服务商的插件,但是我没有找到单独的下载地址,所以只能直接去certbot的源码里找了。
注意:可能需要python3版本。
git clone https://github.com/certbot/certbot.git
cd certbot/certbot-dns-cloudflare
python setup.py build
python setup.py install
获取API Key
登录CloudFlare
如图所示找到API Key
创建一个cloudflare.ini
文件用于配置API Key信息。
# Cloudflare API credentials used by Certbot
dns_cloudflare_email = cloudflare@example.com
dns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234567
上面的邮箱和API Key要替换成自己的。
申请证书
certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d *.example.com
--dns-cloudflare-credentials
后面是前文创建的cloudflare.ini
的路径,-d
后面就是要申请证书的域名,申请野卡证书记得在域名前加*
号。
如果顺利申请成功的话,会看到下面输出信息:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/luxnk.xyz-0001/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/luxnk.xyz-0001/privkey.pem
Your cert will expire on 2018-10-14. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot 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
这里面的两个文件路径就是证书的路径了,之后将它配置到相应Web服务器中就可以了~
证书的有效期是90天,到期后需要续签证书,续签使用下面的命令即可:
certbot renew
也可以通过创建crontab任务实现自动续签证书。
crontab -e
# 打开crontab文件后加入此行
0 3 */7 * * /bin/certbot renew --renew-hook "/etc/init.d/nginx reload"
# 重启cron服务
service cron restart
另外,通过下面指令可以查看当前用certbot申请的证书以及剩余有效时间:
certbot certificates
可能遇见的问题
在执行申请证书的命令时,certbot可能会出现警告:
Unsafe permissions on credentials configuration file: ~/certbot/cloudflare.ini
这是因为保存了API Key的cloudflare.ini
文件访问权限不安全,将该文件权限设置为600就不会再出现这个警告。
chmod 600 cloudflare.ini
参考
- certbot官方文档:https://certbot.eff.org/docs/
- certbot-dns-cloudflare插件主页:https://certbot-dns-cloudflare.readthedocs.io/en/latest/
- Certbot对免费Let’s Encrypt证书的自动续期