centos Let‘s Encrypt 免费https证书申请,并且自动续约

一、首先我们要使用certbot 工具

官网地址: https://certbot.eff.org/instructions?ws=other&os=centosrhel8

下载 snap 工具

sh 复制代码
sudo yum install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo systemctl status snapd
sudo systemctl start snapd

下载安装 cerbot

安装很简单

sh 复制代码
sudo snap install --classic certbot

二、装完后我们要配置证书

  1. ** 在使用 webroot 之前,先配置根目录** 我这边以 nginx 为例
sh 复制代码
     location ^~ /.well-known {
        allow all;
        root /www/xxx.top;
    }

主要是 cerbot 会访问到 .wel-known 这个目录

  1. 配置完后,我们运行命令
sh 复制代码
sudo certbot certonly --webroot -w /www/xxx.top -d xxx.top
-w 或 --webroot-path: 这是你的网站的根目录的路径,certbot 会在这个目录下创建一个名为 .well-known 的子目录(如果还没有的话),并在其中放置验证文件。这个参数后面的值应该是网站的根目录的绝对路径。

-d: 这用于指定你想要为其获取或续约证书的域名。例如,-d xxx.top 表示你想要获取或续约 xxx.top 的证书。

要注意的是,如果你为多个域名获取证书,你可以多次使用 -d 参数,例如:-d example.com -d www.example.com。如果这些域名使用相同的 webroot,那么只需一个 -w 参数。但是,如果它们有不同的 webroot,你需要为每个域名指定其对应的 webroot,如:-w /path/to/webroot1 -d example.com -w /path/to/webroot2 -d sub.example.com
  1. 证书生成后会打印证书路径
    一般在 /etc/letsencrypt/live/ 这个目录下

三、自动续约,申请的3个月就过期了

  1. 查看我们续约的域名
sh 复制代码
sudo certbot certificates
  1. 续约命令
sh 复制代码
sudo certbot renew --quiet --deploy-hook "/home/ec2-user/data/docker/services/nginx/deploy_script.sh"
这个快过期后自动续约, --quiet 参数,那么 Certbot 在默认情况下是不会在终端中输出任何信息的,除非发生错误。这是为了使 Certbot 在静默模式下运行,特别是在计划任务或自动化任务中非常有用。

如果想强制续约测试,加上 --force-renewal,这个有次数限制,建议不需要强制续约,只在调试的时候使用

sudo certbot renew --force-renewal --quiet --deploy-hook "/home/ec2-user/data/docker/services/nginx/deploy_script.sh"
  1. 完整脚本
  • 定时任务
sh 复制代码
每天去检测下
0 2 * * * /home/ec2-user/data/docker/services/nginx/renew_and_deploy.sh
  • renew_and_deploy.sh
sh 复制代码
#!/bin/bash

# 获取 Certbot 提供的续约域名

# Renew the certificate
sudo certbot renew --quiet --deploy-hook "/home/ec2-user/data/docker/services/nginx/deploy_script.sh"

echo "Script executed at $(date)" >> /home/ec2-user/data/docker/services/nginx/logfile.log
  • deploy_script.sh
sh 复制代码
#!/bin/bash

# 测试 强制续约测试 sudo certbot renew --force-renewal --quiet --deploy-hook "/home/ec2-user/data/docker/services/nginx/deploy_script.sh"
# 确认证书时间 sudo openssl x509 -in /etc/letsencrypt/live/xxx.top/fullchain.pem -text -noout | grep "After"
renewed_domains=$RENEWED_DOMAINS

# 检查是否续约了特定的域名
if [[ $renewed_domains == *"xxx.top"* ]]; then
    # 对 example.com 做特定的操作
    echo " 续约xxx.top" >> /home/ec2-user/data/docker/services/nginx/logfile.log

    # Copy the renewed certificate to the desired location
    sudo cp -f /etc/letsencrypt/live/xxx.top/fullchain.pem /home/ec2-user/data/docker/services/nginx/services/nginx/ssl/xxx.top
    sudo cp -f /etc/letsencrypt/live/xxx.top/privkey.pem /home/ec2-user/data/docker/services/nginx/services/nginx/ssl/xxx.top

    # Reload the nginx inside the docker container
    docker exec -it nginx nginx -s reload
fi

其他日志输出

sh 复制代码
  sudo tail -n 100 /var/log/letsencrypt/letsencrypt.log
相关推荐
kebeiovo1 小时前
Linux 环境配置 Boost 库详细步骤
linux·运维·服务器
mljy.2 小时前
Linux《进程信号(上)》
linux
泽虞2 小时前
《LINUX系统编程》笔记p8
linux·运维·服务器·c语言·笔记·面试
正在努力的小河5 小时前
Linux并发与竞争
linux·运维·服务器
三坛海会大神5555 小时前
正则表达式与grep文本过滤详解
linux·运维·正则表达式
码农hbk7 小时前
Linux signal 图文详解(二)信号发送
linux·服务器
東雪蓮☆7 小时前
Shell 编程 —— 正则表达式与文本处理实战
linux·运维·服务器
Gary Studio8 小时前
Linux-驱动积累
linux
lin张9 小时前
函数、数组与 grep + 正则表达式的 Linux Shell 编程进阶指南
linux·运维
苏三福10 小时前
交叉编译linux-arm32位程序
linux·运维·服务器