使用Certbot签发Let’s Encrypt泛域名证书

前置条件

所使用的系统环境为:Ubuntu Server 18.04

所使用的域名解析商:DNSPOD

本文所有步骤及结论,均基于上述前置条件,如有不一致,请读者自行调整。

操作步骤

1、添加PPA并更新软件列表(逐行执行)

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update

2、安装Certbot

sudo apt-get install certbot

3、安装对应DNS解析商插件

sudo apt-get install python3-certbot-dns-<PLUGIN>

我的DNS解析商是DNSPOD,但官方并没有提供支持,只能够用第三方的,从这一步开始,就与官方的教程有些差异了。

这一步我需要进行的安装步骤是:(逐行执行)

git clone https://github.com/tengattack/certbot-dns-dnspod
cd certbot-dns-dnspod
sudo python setup.py install

*注意:如果install的时候提示找不到各种文件,请先执行:

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

这里注意的是,需要先创建API Token,点此去创建

将创建好的API IDAPI TOKEN保存在一个文件中,这里假设是/path/to/credentials.ini。文件保存的格式如下:

certbot_dns_dnspod:dns_dnspod_api_id = 12345
certbot_dns_dnspod:dns_dnspod_api_token = 1234567890abcdef1234567890abcdef

保存后,修改文件的权限:

chmod 600 /path/to/credentials.ini

至此,整个配置过程就已经完成了。于是,我们可以使用以下命令来生成证书文件:

certbot certonly -a certbot-dns-dnspod:dns-dnspod --certbot-dns-dnspod:dns-dnspod-credentials /path/to/credentials.ini -d example.com -d "*.example.com"

*注意:上述命令中,/path/to/credentials.ini是上一步生成的包含DNSPOD API Token的文件,example.com*.example.com就是你的泛域名。

生成后的证书会保存在:

/etc/letsencrypt/live/example.com

*注意:example.com是上述步骤中对应的域名

此时,证书有效期为3个月,那3个月后怎么办呢?因此,我们需要在系统的Crontab中写一个定时任务来更新证书,更新命令为:

/usr/local/bin/certbot renew -a certbot-dns-dnspod:dns-dnspod --certbot-dns-dnspod:dns-dnspod-credentials /path/to/credentials.ini

至此,整个生成过程就完成了,Enjoy it~

参考文档

1、https://certbot.eff.org/lets-encrypt/ubuntubionic-other

2、官方支持的DNS解析商

3、DNSPOD的插件地址及其使用方法