2025-03-01
编程
00
请注意,本文编写于 58 天前,最后修改于 58 天前,其中某些信息可能已经过时。

目录

前提
安装Certbot
更新软件包列表
安装 Certbot 和 Nginx 插件
2. 获取 Let's Encrypt 证书
1.使用 Nginx 插件自动配置(不推荐)
2.使用 Nginx 插件手动配置
3.使用 Nginx 插件自定义端口配置(推荐)
1.手动配置nginx端口映射(以1080端口为例)
2.运行注册命令
3. 证书的生成位置
4. 配置 Nginx 使用新证书
5. 测试续签过程
6. 检查续签任务
7. 设置定时续签任务
1.使用 cron 定时续签

基于Certbot 获取证书

前提

  • nginx
  • Certbot
  • python3-certbot-nginx插件
  • 购买了域名,且映射到了自己的 IP 地址。

安装Certbot

在 Debian 系统上使用 Let's Encrypt 获取 SSL 证书并设置定时续签任务,通常可以通过 Certbot 工具来完成。Certbot 是由 EFF(电子前沿基金会)开发的免费工具,用于自动化获取和续订 Let's Encrypt 证书。

首先,确保你的系统已经更新,并安装 Certbot 和相关的 Nginx 插件(如果你使用的是 Nginx)。

更新软件包列表

sh
sudo apt update

安装 Certbot 和 Nginx 插件

sh
sudo apt install certbot python3-certbot-nginx

提示

如果你使用其他 Web 服务器(如 Apache),请相应地替换插件名称(例如 python3-certbot-apache)。

2. 获取 Let's Encrypt 证书

假设你已经在 Nginx 中配置了一个监听 1080 端口的虚拟主机。你需要确保该虚拟主机可以正确处理 HTTP 请求以完成 ACME 挑战。

1.使用 Nginx 插件自动配置(不推荐)

你可以让 Certbot 自动配置 Nginx 虚拟主机:

sh
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --must-staple -d yourdomain.com -d www.yourdomain.com

在这个命令中:

  • --nginx:使用 Nginx 插件。
  • --agree-tos:同意 Let's Encrypt 的服务条款。
  • --redirect:将所有 HTTP 请求重定向到 HTTPS。
  • --hsts--staple-ocsp--must-staple:启用额外的安全特性。
  • -d yourdomain.com -d www.yourdomain.com:指定你要申请证书的域名。

注意

默认80端口

2.使用 Nginx 插件手动配置

如果你不想让 Certbot 自动修改 Nginx 配置,可以手动运行以下命令来获取证书:

sh
sudo certbot certonly --webroot -w /var/www/html -d yourdomain.com -d www.yourdomain.com

在这个命令中:

  • --webroot:通过 Web 根目录进行验证。
  • -w /var/www/html:指定 Web 根目录。
  • -d yourdomain.com -d www.yourdomain.com:指定你要申请证书的域名。

注意

默认80端口

3.使用 Nginx 插件自定义端口配置(推荐)

1.手动配置nginx端口映射(以1080端口为例)

nginx
# 证书自动续签 server { listen 1080; server_name yourdomain.com www.yourdomain.com; location /.well-known/acme-challenge/ { root /var/www/html; } }

2.运行注册命令

certbot certonly --webroot -w /var/www/html -d yourdomain.com -d www.yourdomain.com --http-01-port 1080

--webroot:指定使用 Web 根目录验证方法。
-w /var/www/html:指定 Web 根目录为 /var/www/html。
-d yourdomain.com -d www.yourdomain.com:指定你要申请证书的域名。
--http-01-port 1080:指定 ACME 挑战通过 1080 端口进行验证。

警告

续签的命令后面需要追加 --http-01-port 1080
例如:
0 5 * * * /usr/bin/certbot renew --quiet --http-01-port 1080

3. 证书的生成位置

提示

证书默认生成位置 /etc/letsencrypt/live/yourdomain.com

创建符号链接:
创建一个指向默认证书存储位置的符号链接到你希望的自定义路径。 ln -s /etc/letsencrypt/live/yourdomain /root/cert

4. 配置 Nginx 使用新证书

如果你没有使用 --nginx 插件自动配置 Nginx,需要手动编辑 Nginx 配置文件以使用新证书。编辑 /etc/nginx/sites-available/yourdomain 文件(或相应的配置文件):

nginx
server { listen 1080 ssl; server_name yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; location / { # 你的其他配置 } }

保存并退出编辑器,然后测试 Nginx 配置是否正确:

sh
sudo nginx -t

如果测试成功,重新加载 Nginx:

sh
sudo systemctl reload nginx

5. 测试续签过程

  • 30天以内才能续签
    为了确保一切正常,可以手动运行续签命令进行测试:
sh
sudo certbot renew --dry-run

注意

自定义端口运行命令需要加 --http-01-port 1080

这个命令会模拟整个续签流程,但不会实际更新证书。它可以帮助你确认续签配置是否正确。

6. 检查续签任务

certbot certificates

检查Expiry Date和Certificate是否更新

7. 设置定时续签任务

Let's Encrypt 证书的有效期为 90 天,建议定期续签证书。Certbot 提供了一个方便的命令来进行续签操作,并且可以通过 cronsystemd 定时任务来实现自动续签。

1.使用 cron 定时续签

  1. 打开 crontab 编辑器:

    sh
    sudo crontab -e
  2. 添加以下行来每天尝试续签证书(仅在必要时续签):

    sh
    0 5 * * * /usr/bin/certbot renew --quiet

注意

自定义端口运行命令需要加 --http-01-port 1080

这个命令表示每天凌晨 5 点执行一次 certbot renew --quiet,其中 --quiet 参数用于减少输出信息,只在有实际操作时生成日志。

如果有任何错误或需要改进,欢迎留言指正。