目标

需求:需要自动申请https证书。由于Let’s Encrypt证书有效期是3个月,需要配置到期自动续费
背景:域名已经解析到服务器,并且自己有访问该服务器的权限。
实现方法:

安装certbot

登录服务器,安装certbot
确认/etc/hosts里有127.0.0.1 {主机名} 防止报错

安装snapd工具

# Ubuntu系统
sudo apt update
sudo apt install snapd
# Centos系统
sudo yum install epel-release
sudo yum install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap  # 创建符号链接

安装certbot

sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

配置nginx

Certbot 可以直接与 Nginx 集成,自动修改 Nginx 配置并设置证书。

确保nginx配置正确

在运行 Certbot 之前,请确保你的 Nginx 配置文件(通常在/etc/nginx/conf.d/ 下)中的 server_name 指令包含了你希望申请证书的所有域名。
例如:

server {
    listen 80;
    server_name your_domain.com www.your_domain.com;
    # ... 其他配置
}

确认 Nginx 配置无误后,重新加载或重启 Nginx:

nginx -t
systemctl restart nginx

获取并安装 HTTPS 证书

现在,你可以运行 Certbot 来获取并安装证书了。

sudo certbot --nginx

Certbot 会执行以下操作:

  • 扫描 Nginx 配置:它会自动检测你的 Nginx 配置文件,找到 server_name 指令中列出的域名。
  • 提示选择域名:如果你的 Nginx 配置中有多个域名或子域名,Certbot 会列出它们,并让你选择为哪些域名签发证书。
  • 验证域名所有权:Certbot 会自动通过 HTTP-01 挑战(在你的服务器上创建临时文件,Let’s Encrypt 会通过 HTTP 访问这些文件来验证)来验证你对域名的所有权。
  • 修改 Nginx 配置:成功验证后,Certbot 会自动修改你的 Nginx 配置文件,添加必要的 listen 443 ssl 指令、证书路径以及重定向 HTTP 请求到 HTTPS 的规则。
  • 安装证书:证书文件会存储在 /etc/letsencrypt/live/你的域名/ 目录下。
    整个过程是交互式的,你只需要按照提示进行操作即可。

验证自动续签

Let’s Encrypt 证书的有效期是 90 天,但 Certbot 会自动安排续签。

Certbot 会在 /etc/cron.d/certbot 或 systemd 定时器中添加一个任务,每天运行两次,检查证书是否需要续签。如果证书在 30 天内到期,它会自动尝试续签。

你可以通过运行以下命令来测试续签过程(这不会实际续签证书,只是模拟):

sudo certbot renew --dry-run

如果输出显示“The dry run was successful.”,则表示自动续签已正确配置。

在使用Certbot工具通过交互式生成证书后,该工具会创建了一个系统级的定时任务(通常是通过 systemd 定时器或 cron),来定期检查并续签证书。不需要手动添加到 crontab 中。
在申请成功的时候也能看到返回的这个提示

Certbot has set up a scheduled task to automatically renew this certificate in the background.
版权所有,转载注明来源