最近阿里云服务器的SSL证书
过期了,准备重新申请个免费的,结果发现现在阿里云的免费证书(20次的那个)新申请的有效期只有3个月
,像之前1年有效期的现在现在是新服务,要68元一年
。要每隔3个月手动换一次证书对我这种懒癌晚期的人简直是致命打击。
最后在网上找到了LetsEncrypt,本文内容主要实现在阿里云上用LetsEncrypt替代原本的SSL证书泛域名配置并自动续订。
准备工作
安装Certbot
Certbot是一个免费的开源软件工具,用于在手动管理的网站上自动使用Let’s Encrypt证书以启用HTTPS。
1
2
3
4
5
6
|
# 通过wget下载,报404问题,不晓得是不是源的问题,换为yum来安装
# wget https://dl.eff.org/certbot-auto
yum install -y epel-release
# yum安装,直接在bin目录有可执行程序,不用像wget那样赋予执行权限
yum install -y certbot
|
安装可能出现的问题
1
2
3
4
5
6
7
8
9
10
11
12
13
|
作为依赖被安装:
pyOpenSSL.x86_64 0:0.13.1-4.el7 python-cffi.x86_64 0:1.6.0-5.el7 python-enum34.noarch 0:1.0.4-1.el7
python-idna.noarch 0:2.4-1.el7 python-ndg_httpsclient.noarch 0:0.3.2-1.el7 python-ply.noarch 0:3.4-11.el7
python-pycparser.noarch 0:2.14-1.el7 python-requests.noarch 0:2.6.0-10.el7 python-requests-toolbelt.noarch 0:0.8.0-3.el7
python-zope-component.noarch 1:4.1.0-5.el7 python-zope-event.noarch 0:4.0.3-2.el7 python-zope-interface.x86_64 0:4.0.5-4.el7
python2-acme.noarch 0:1.11.0-1.el7 python2-certbot.noarch 0:1.11.0-2.el7 python2-configargparse.noarch 0:0.11.0-2.el7
python2-cryptography.x86_64 0:1.7.2-2.el7 python2-distro.noarch 0:1.5.0-1.el7 python2-future.noarch 0:0.18.2-2.el7
python2-josepy.noarch 0:1.3.0-2.el7 python2-mock.noarch 0:1.0.1-10.el7 python2-parsedatetime.noarch 0:2.4-6.el7
python2-pyasn1.noarch 0:0.1.9-7.el7 python2-pyrfc3339.noarch 0:1.1-3.el7 python2-six.noarch 0:1.9.0-0.el7
pytz.noarch 0:2016.10-2.el7
失败:
python-urllib3.noarch 0:1.10.2-7.el7
|
出现这个urllib3
安装失败可能导致使用certbot
时出现ImportError: cannot import name UnrewindableBodyError
错误,处理方式如下:
手动删除相关依赖
1
2
3
4
|
sudo pip uninstall requests
sudo pip uninstall urllib3
sudo yum remove python-urllib3
sudo yum remove python-requests
|
进行检查
1
2
|
rpm -qa | grep requests
pip freeze | grep requests
|
通过yum安装相关依赖
1
2
|
sudo yum install python-urllib3
sudo yum install python-requests
|
1
2
|
certbot --version
# certbot 1.11.0
|
申请证书参数说明
1
2
3
4
5
6
7
8
9
|
certbot certonly -d *.xxx.xxx --email yourEmail@qq.com --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
参数说明:
-certonly,表示安装模式,Certbot 有安装模式和验证模式两种类型的插件。
-manual,表示手动安装插件,Certbot 有很多插件,不同的插件都可以申请证书,用户可以根据需要自行选择。
-d,为哪些主机申请证书,如果是通配符,输入 *.hubinqiang.com(替换为自己的域名)。
-preferred-challenges,使用 DNS 方式校验域名所有权。
-server,Let’s Encrypt ACME v2 版本使用的服务器不同于 v1 版本,需要显示指定。
|
申请过程
以我的博客为例子,假如我想要适配顶级域名iamky.cn以及通配www.iamky.cn的二级域名证书,需要两个-d
1
|
certbot certonly --server https://acme-v02.api.letsencrypt.org/directory --manual --preferred-challenges dns --email you@gmail.com --agree-tos -d *.iamky.cn -d iamky.cn
|
添加域名解析记录用于验证
替换原有的证书
编辑nginx.conf,将原有的ssl证书路径替换为用Let’s Encrypt生成的证书,切记ssl_certificate
用的是fullchain.pem
1
2
|
ssl_certificate /etc/letsencrypt/live/iamky.cn/fullchain.pem; # 指定证书的位置,绝对路径
ssl_certificate_key /etc/letsencrypt/live/iamky.cn/privkey.pem; # 绝对路径,同上
|
确认证书是否生效
以chrome浏览器为例子,访问对应的网址,打开开发者工具,可以看到不同域名之间对应的证书有生效。
定时自动续期
LetsEncrypt的有效期是3个月,但它支持自动获取证书的,也就是说你可以设置在证书失效前,例如每隔2个月自动再请求新的证书,这样我们以后就不用担心证书失效了。以CentOS系统为例子,可以用Crontab来实现它的自动续期
1
2
|
0 2 * */2 * certbot renew >> /var/log/le-renew.log
30 2 * */2 * /usr/bin/systemctl reload nginx
|
参考文章一:阿里云搭建Let’s encrypt通配符证书
参考文章二:Linux之免费证书工具certbot安装和使用
参考文章三:ImportError: cannot import name UnrewindableBodyError #603