基于Certbot 获取证书
在 Debian 系统上使用 Let's Encrypt 获取 SSL 证书并设置定时续签任务,通常可以通过 Certbot 工具来完成。Certbot 是由 EFF(电子前沿基金会)开发的免费工具,用于自动化获取和续订 Let's Encrypt 证书。
首先,确保你的系统已经更新,并安装 Certbot 和相关的 Nginx 插件(如果你使用的是 Nginx)。
shsudo apt update
shsudo apt install certbot python3-certbot-nginx
提示
如果你使用其他 Web 服务器(如 Apache),请相应地替换插件名称(例如 python3-certbot-apache
)。
假设你已经在 Nginx 中配置了一个监听 1080 端口的虚拟主机。你需要确保该虚拟主机可以正确处理 HTTP 请求以完成 ACME 挑战。
你可以让 Certbot 自动配置 Nginx 虚拟主机:
shsudo 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端口
如果你不想让 Certbot 自动修改 Nginx 配置,可以手动运行以下命令来获取证书:
shsudo 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端口
nginx# 证书自动续签 server { listen 1080; server_name yourdomain.com www.yourdomain.com; location /.well-known/acme-challenge/ { root /var/www/html; } }
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
提示
证书默认生成位置 /etc/letsencrypt/live/yourdomain.com
创建符号链接:
创建一个指向默认证书存储位置的符号链接到你希望的自定义路径。
ln -s /etc/letsencrypt/live/yourdomain /root/cert
如果你没有使用 --nginx
插件自动配置 Nginx,需要手动编辑 Nginx 配置文件以使用新证书。编辑 /etc/nginx/sites-available/yourdomain
文件(或相应的配置文件):
nginxserver { 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 配置是否正确:
shsudo nginx -t
如果测试成功,重新加载 Nginx:
shsudo systemctl reload nginx
shsudo certbot renew --dry-run
注意
自定义端口运行命令需要加 --http-01-port 1080
这个命令会模拟整个续签流程,但不会实际更新证书。它可以帮助你确认续签配置是否正确。
certbot certificates
检查Expiry Date和Certificate是否更新
Let's Encrypt 证书的有效期为 90 天,建议定期续签证书。Certbot 提供了一个方便的命令来进行续签操作,并且可以通过 cron
或 systemd
定时任务来实现自动续签。
打开 crontab
编辑器:
shsudo crontab -e
添加以下行来每天尝试续签证书(仅在必要时续签):
sh0 5 * * * /usr/bin/certbot renew --quiet
注意
自定义端口运行命令需要加 --http-01-port 1080
这个命令表示每天凌晨 5 点执行一次 certbot renew --quiet
,其中 --quiet
参数用于减少输出信息,只在有实际操作时生成日志。
注
如果有任何错误或需要改进,欢迎留言指正。