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

  1. root 以root权限执行
  2. test -x: 判断文件是否存在且可执行
  3. -a: test命令的参数,逻辑与
  4. \!: test命令的参数,逻辑非
  5. -d: 目录是否存在
  6. &&: 前面的命令执行成功,才执行后面的命令
  7. perl xxx: 随机休眠
  8. certbot -q: 不输出执行结果日志
  9. certbot -q renew: 执行HTTPS证书更新
  10. –renew-hook: 如果执行成功的话执行钩子指定的命令

把-q去掉后有两种结果:

  1. 执行成功,

  2. 你执行得太频繁了,服务端不给你更新证书,一般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