使用Let's Encrypt生成通配符SSL证书

Let’s Encrypt宣布从2018-03-13起开始支持通配符证书

必备条件

不过想要生成通配符证书,有两个条件:

  1. 使用ACME v2协议
  2. 使用DNS验证域名所属权

实现了ACME v2协议的工具有很多,官方依然推荐使用Certbot,版本号>= 0.22.0。

通配符证书必须通过DNS进行域名所属权验证:DNS需要添加TXT记录。

生成证书

安装Certbot,选择相应的WebServer和操作系统,按照说明安装Certbot。

然后通过dns验证的方式生成证书:可以手动添加dns TXT记录,也可以通过插件自动添加dns TXT记录。文中特别指出,如果想要生成通配符证书,可以安装Certbot's DNS plugins。手动和自动都可以生成SSL证书,但是通配符的证书有效期也是3个月,使用插件自动生成、续期十分方便。

针对那些没有在列表中DNS服务商,可以去自行搜索。

本站域名解析使用的是DNSPod,可以使用certbot-dns-dnspod,使用pip安装。

安装完成后,到DNSPod控制台生成API Token,并保存在配置文件/path/credentials.ini

sudo certbot certonly -a certbot-dns-dnspod:dns-dnspod --certbot-dns-dnspod:dns-dnspod-credentials /path/credentials.ini -d latlonworld.com -d "*.latlonworld.com" --server https://acme-v02.api.letsencrypt.org/directory

# -a:指定使用的插件
# --certbot-dns-dnspod:指定dnspod使用的token文件
# -d:指定要生成证书的域名
# --server:指定ACME的版本

其他DNS plugins的使用也是类似的。

运行命令后,根据向导输入邮箱,同意条款,选择是否与EFF共享个人邮箱信息,然后DNS plugin创建DNS TXT记录,进行域名验证,然后生成SSL证书,然后删除DNS TXT记录。最后提示证书生成成功!

PS:生成证书时指定的域名*.latlonworld.com是通配符域名,但是并不包括latlonworld.com祼域名。

我第一次生成的证书只指定了*.latlonworld.com域名,出现了下面的尴尬。。。

letsencrypt-wildcard-without-naked

而同时包含通配符域名和祼域名的证书如下:

letsencrypt-wildcard-with-naked

本文只记录一些核心过程,其他可以参考以前的文章使用Let's Encrypt生成免费SSL证书