[date: 2018-03-19 17:43] [visits: 49]

Let's Encrypt泛域名证书

Let's Encrypt来头不小...略...

博客需要支持HTTPS,用Let's Encrypt提供的免费证书,真是再好不过,近期Let's Encrypt宣布支持泛域名证书的申请,觉得泛域名证书比单域名证书更好维护,也就尝尝鲜,本文记录使用certbot申请泛域名证书的过程以及遇到的几个问题。

安装

已安装过certbot-0.21.0,系统信息:

lsb_release -a
LSB Version:    :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description:    CentOS Linux release 7.4.1708 (Core) 
Release:    7.4.1708
Codename:   Core

新的泛域名证书需要升级certbot到0.22.0及以上,官方安装指南

参照其他文章,在机器上运行certbot-auto -V,的确完成了升级,但提示没有-V选项,也许是操作系统不一样,未深究,猜测执行certbot-auto命令时会自动完成升级。

升级完成后,多了两个可执行文件certbot与certbot-2,其中certbot是certbot-2的软连接,使用certbot --version查看版本号,显示0.22.0,接下来开始申请。

申请

由于certbot dns-plugins不支持阿里云API,故这一步需要通过交互式申请,从而导致后续不能使用crontab配置证书自动续签。

申请命令:

certbot certonly -d *.amsimple.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory

--manual交互式获取,--preferred-challenges dns使用DNS验证的方式(泛域名只能使用DNS验证),--server指明支持acme-v02的Server地址,默认是acme-v01的地址。

按照要求输入邮箱,同意协议,当看到下面信息:

------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.amsimple.com with the following value:

JHkwGFgXq3OgedI-4RU1X0EcFUz7cxIPN7r1Qyw5JTw

Before continuing, verify the record is deployed.
------------------------------------------------------------
Press Enter to Continue

暂停操作,配置域名解析,添加一条TXT类型的解析:

纪录:_acme-challenge.amsimple.com 结果:JHkwGFgXq3OgedI-4RU1X0EcFUz7cxIPN7r1Qyw5JTw

等待3-5分钟,使用以下命令检查解析是否设置成功:

dig -t txt _acme-challenge.amsimple.com @8.8.8.8

域名解析结果正确,再回到certbot申请的流程中敲回车,成功后,certbot会提示证书和私钥的路径,接着在nginx中配置并重启即可,Good luck have fun~

问题

申请过程中遇到了两个小问题,在certbot的官方Github的issue中找到热心网友提供的解决办法,记录在此,也许你也会遇到同样的问题,可参考解决。

问题一

certbot升级完成后,运行certbot进行泛域名申请时,提示缺少库文件:

No module named 'requests.packages.urllib3'

通过以下命令安装依赖:

pip install requests urllib3 pyOpenSSL --force --upgrade

问题二

再次运行时,继续提示错误:

ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.

通过以下命令修复:

pip install --upgrade --force-reinstall 'requests==2.6.0'

Tips

申请的泛域名证书*.amsimple.com并不能用在amsimple.com,所以服务器还是需要两个证书。

由于dns plugins不支持阿里云API,暂时不能全自动续签,而一次申请只有三个月有效期,建议大家晚点尝试,如果你有更好的全自动续签方法,欢迎邮件指导。