certbot简单使用

ssl一直用的是阿里的免费证书,但是每年需要定时更换证书,而且数量上也有限制,这就很烦,我这么懒,别说一年一换,就是两年一换证书我都懒得打开后台~

科普

为了加快推广 https 的普及, EEF 电子前哨基金会、 Mozilla 基金会和美国密歇根大学成立了一个公益组织叫 ISRG ( Internet Security Research Group ),这个组织从 2015 年开始推出了 Let’s Encrypt 免费证书。后来 ISRG 的发起者 EFF (电子前哨基金会)为 Let’s Encrypt 项目发布了一个官方的客户端 Certbot ,利用它可以完全自动化的获取、部署和更新安全证书

常用命令

certbot renew -q // 续签(-q, –quiet 程序运行只输出错误信息)
certbot certificates // 查看证书
openssl x509 -in [公钥xx.pem] -noout -dates  // 检测过期时间
openssl s_client -connect xxx.com:443  // 检查域名端口配置情况

安装

centOS

yum update
yum install certbot

debian/deepin/ubuntu

apt update
apt install certbot -y

生成证书

certbot certonly

有两个选项:
选项1,适用于还没有搭建服务器的情况,因为默认采用80端口,如果有其他程序占用了,如nginx,需要先关闭。
选项2,适用已搭建服务器的情况,可以根据网站目录验证后生成,不占用端口,因为已有服务在运行,我直接选择了2

第一次使用,会提示输入邮箱: xxx@xx.com
输入域名,这里我是二级域名: 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

证书地址:

    /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

自动续期

脚本

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

touch auto_update_ssl.sh
vim auto_update_ssl.sh
    #!/bin/bash

    # 关闭nginx
    nginx -s quit

    # 证书更新完毕后,将关闭的nginx启动
    certbot renew --renew-hook "nginx" > /root/shell/log/auto_update_ssl.log 2>&1 &

计划任务

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

0 0 1 * * /root/shell/auto_update_ssl.sh

问题

安装使用过程并不是一帆风顺的,这里枚举下安装使用过程中的一些问题

# urllib3问题********
python ImportError: cannot import name UnrewindableBodyError
=>
pip uninstall urllib3
sudo pip install --upgrade urllib3

# pyOpenSSL问题********
ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
=>
yum install http://cbs.centos.org/kojifiles/packages/pyOpenSSL/16.2.0/3.el7/noarch/python2-pyOpenSSL-16.2.0-3.el7.noarch.rpm

# 缺少文件********
http://xxx.com/.well-known/acme-challenge/OMxmbVthqV6XEcG5lG8jCvxa5k2A7ELowLFWZzOaatA:404
=> 创建名为[OMxmbVthqV6XEcG5lG8jCvxa5k2A7ELowLFWZzOaatA]的文件复制到相应路径即可

参考链接

certbot文档
参考安装使用部分
参考certbot科普部分

posted @ 2023-01-02 17:48  续断  阅读(1397)  评论(0编辑  收藏  举报