踩了大量坑,做下记录。以下适用于博主本人,但是未必会适用于所有人
单域名与泛域名证书生成
sudo certbot certonly --standalone --email '邮箱' -d '域名'
certbot certonly --preferred-challenges dns --manual -d *.baidu.com(修改这里) --server https://acme-v02.api.letsencrypt.org/directory
certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini -d *.baidu.com(修改这里)
nginx配置SSL
server {
listen 80;
server_name 对应的域名;
return 301 https://$server_name$request_uri;
location / {
proxy_pass http://localhost:8080;
}
}
server {
listen 443 ssl;
server_name 对应的域名;
ssl_certificate /etc/letsencrypt/live/baidu.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/baidu.com/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:8080;
}
}
自动续期脚本
??在生成泛域名证书时,我们需要手动在DNS解析中配置TXT,然而续费命令renew 无法去完成我们手动配置TXT的过程,需要我们手动配置,所以会报错。
??我们需要用到一个DNS插件,这样我们就不需要配置TXT了,可以直接生成证书或者续费,也可以尝试把下面命令中的厂商改成你的厂商。
DNS-plugins
??在上面链接中找到自己的服务商,我用的是cloudflare。注意:如果是国内的厂商,去GitHub上找脚本。
snap install certbot-dns-cloudflare
pip install certbot
pip install certbot-dns-cloudflare
??这个地方遇到了问题,很久才解决,因为我是双python环境,但是排除很久不知道哪里冲突了,干脆直接删了python3,在重新安装pip,让他变成python2的pip
certbot plugins
API Key在“My Profile”–>“API Tokens”
touch /etc/letsencrypt/cloudflare.ini
vim /etc/letsencrypt/cloudflare.ini
dns_cloudflare_email = cloudflare@example.com
dns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234567
chmod 600 /etc/letsencrypt/cloudflare.ini
接下来可以执行生成证书或者续费证书的操作了
修改续费配置文件(手动生成的证书才需要修改)
??如果我们使用的是手动配置的泛解析,那么我们无法直接执行renew,即使已经配置了DNS插件。 进入 /etc/letsencrypt/renewal 目录,找到续费配置文件,找到如下配置:
??可以看到,配置文件是手动方式,我们需要手动改成DNS方式(如果前面用的是DNS自动方式生成的证书,就没有这方面烦恼了)
??按照如下的配置进行修改:
[renewalparams]
authenticator = dns-cloudflare
account = 71e9f9688487336cb4851b7174d327c6
dns_cloudflare_credentials = /etc/letsencrypt/cloudflare.ini
server = https://acme-v02.api.letsencrypt.org/directory
??如果不想修改配置,也可以重新执行上面的安装证书第三条配置命令。
certbot renew
certbot renew --force-renewal
--pre-hook:更新证书之前调用
--post-hook:更新证书之后调用
--deploy-hook:成功更新证书之后调用
certbot renew --deploy-hook "nginx -s reload"
chmod +x certrenew.sh
crontab -e
0 0 1 * * /shell/certrenew.sh >> /shell/certrenew.log 2>&1
service crond restart
crontab -l
无需续期
续费成功
其他报错
[Errno 17] 错误
尝试运行 certbot update_symlinks
|