2023年3月14日 作者 zeroheart

ssl证书自动续期

原文:几种ssl证书免费申请跟certbot生成证书及自动续签 – 掘金 (juejin.cn)

前言

Let’s Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。

Let’s Encrypt由互联网安全研究小组(缩写ISRG)提供服务。主要赞助商包括电子前哨基金会、Mozilla基金会、Akamai以及思科。2015年4月9日,ISRG与Linux基金会宣布合作。

用以实现新的数字证书认证机构的协议被称为自动证书管理环境(ACME)。GitHub上有这一规范的草案,且提案的一个版本已作为一个Internet草案发布。

Let’s Encrypt宣称这一过程将十分简单、自动化并且免费。

2015年8月7日,该服务更新其推出计划,预计将在2015年9月7日发布首个证书,随后向列入白名单的域名发行少量证书并逐渐扩大发行量。

2015年12月3日,服务进入公测阶段,正式面向公众。

2016年3月8日,ISRG宣布已经签发了第一百万张证书。

2016年4月12日,该项目正式离开Beta阶段。

2017年6月28日,ISRG宣布,他们已经签发了一亿张证书。

免费ssl证书申请地址

freessl.cn/

amh.sh/ssl.htm

免费生成证书就不多介绍了,无非就是DNS解析或根目录放文件做文件验证俩种方式,验证完把生产的key crt放服务器就行下面主要介绍下cerbot生成证书及自动续费

certbot

介绍

Certbot 是 Let’s Encrypt CA(或使用 ACME 协议的任何其他 CA )的功能全面,可扩展的客户端,可以自动执行获取证书和配置 Web 服务器以使用证书的任务。该客户端在基于 Unix 的操作系统上运行。

在 2016 年 5 月之前,根据安装方法的不同,Certbot 的名称简称为 letsencrypt 或 letsencrypt-auto。Internet 上的说明以及某些软件仍可能使用该旧名称。

中文文档地址

certbot 网安文档

安装

centOS

yum update 
yum install certbot
复制代码

debian/deepin/ubuntu

apt update 
apt install certbot -y
复制代码

生成证书

certbot certonly
复制代码

有两个选项:

选项1,适用于还没有搭建服务器的情况,因为默认采用80端口,如果有其他程序占用了,如nginx,需要先关闭。

选项2,适用已搭建服务器的情况,可以根据网站目录验证后生成,不占用端口,因为已有服务在运行,我直接选择了2

第一次使用,会提示输入邮箱: [email protected]

输入域名,这里我是二级域名: xx.xxx.com,

然后输入网站的绝对路径: /home/wwwroot/xxx(文件验证)

当然,我建议直接一步到位:

certbot certonly --webroot -w /home/wwwroot/xxx -d xxx.com
复制代码

注意:

使用生成证书的命令是有接口限制的,因此不建议频繁调用,如果报错了先排查出问题再继续,可以在末尾加上–dry-run用于获取测试证书排查问题,没有报错后再去掉它获取正式证书

certbot certonly --webroot -w /home/wwwroot/xxx -d xxx.com --dry-run
复制代码

如果申请第二个证书时需要用到

--duplicate 告诉certbot不管有没有旧证书,都创建一个独立的新证书
复制代码

证书地址:

/etc/letsencrypt/live/xxx.com/fullchain.pem; 
/etc/letsencrypt/live/xxx.com/privkey.pem;
复制代码

配置nginx

server { 
    # 某个版本前的老版本可以用ssl on,我的是 nginx/1.16.1,用listen 
    listen 443 ssl; 
    ... 
    ssl_certificate /etc/letsencrypt/live/xxx.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/xxx.com/privkey.pem; 
}
复制代码

证书续期

certbot默认注册的证书,有效期是90天, 需要定期更新证书

手动续期

在到期前30天之内才能续期,否则certbot会判断没有必要进行续期

certbot renew
复制代码

自动续期

脚本

脚本按实际情况自定义,不需要完全按照我的来

cd /home 
mkdir shell 
cd shell 
mkdir log 
touch auto_update_ssl.sh 
vim auto_update_ssl.sh
复制代码
#!/bin/bash 
# 关闭nginx 
nginx -s quit 
# 证书更新完毕后,将关闭的nginx启动 
certbot renew --renew-hook "nginx" > /home/shell/log/auto_update_ssl.log 2>&1 &
复制代码

nginx nginx -s quit有时候杀不干净进程后续我就改为

#!/bin/bash 
# 关闭nginx 
killall -9 nginx 
# 证书更新完毕后,将关闭的nginx启动 
certbot renew --force-renewal > /home/shell/log/auto_update_ssl.log 2>&1 & nginx
复制代码
计划任务

这里我设置每月执行一次续期

crontab -e
0 0 1 * * /home/shell/auto_update_ssl.sh
复制代码

遇到的问题

urllib3问题 python ImportError: cannot import name UnrewindableBodyError

解决

pip uninstall urllib3 sudo pip install --upgrade urllib3
复制代码

如果依然报错

pkg_resources.DistributionNotFound: The ‘urllib3<1.23,>=1.21.1’ distribution was not found and is required by requests

解决

easy_install urllib3==1.21.1
复制代码

pyOpenSSL问题 ImportError: ‘pyOpenSSL’ module missing required functionality. Try upgrading to v0.14 or newer.

pip install --upgrade --force-reinstall 'requests==2.6.0'
复制代码

github解决地址github.com/certbot/cer…