Certbot申请https证书
Certbot申请HTTPS证书
参考博客: 使用Certbot申请免费 HTTPS 证书及自动续期
安装Certbot
yum install epel-release -y
yum install certbot -y
生成证书
sudo certbot certonly --webroot -w /opt/shortcut/hugo/wedo/public -d caowd.com -d www.caowd.com
更新证书
# 官方给出的命令
root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew --renew-hook "systemctl reload nginx"
# 简化的命令
# root用户下,安装certbot,且有systemd服务的情况下:
certbot renew --renew-hook "systemctl reload nginx"
命令说明: 命令意为: 以root权限执行命令,如果certbot命令存在且可执行,并且/run/systemd/system目录不存在,那么sleep一个随机时间后,更新证书(certbot renew),执行后通过金子调用命令:systemctl reload nginx
- root 以root权限执行
- test -x: 判断文件是否存在且可执行
- -a: test命令的参数,逻辑与
- \!: test命令的参数,逻辑非
- -d: 目录是否存在
- &&: 前面的命令执行成功,才执行后面的命令
- perl xxx: 随机休眠
- certbot -q: 不输出执行结果日志
- certbot -q renew: 执行HTTPS证书更新
- –renew-hook: 如果执行成功的话执行钩子指定的命令
把-q去掉后有两种结果:
-
执行成功,
-
你执行得太频繁了,服务端不给你更新证书,一般30天才给你更新证书
日志类似如下:
Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/caowd.com.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert not yet due for renewal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The following certificates are not due for renewal yet: /etc/letsencrypt/live/caowd.com/fullchain.pem expires on 2023-11-29 (skipped) No renewals were attempted. No hooks were run. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
这个命令我奇怪的一点是: \! -d /run/systemd/system
这一句的意思是: 检测 /run/systemd/system
目录是否存在,不存在为真, 此时才执行后面的命令
如果systemd服务不存在才执行,明显不太对
另外一个奇怪的地方是: perl -e 'sleep int(rand(43200))'
shell有直接sleep的命令,等价的命令是: sleep $(($RANDOM % 43200))
为什么不直接用这个, 而且为什么要sleep