certbot 申请 Let's Encrypt 证书
安装 certbot
yum -y install certbot
apt-get update
apt-get install certbot
# 检查是否安装成功
certbot --version
通过 nginx 申请证书
先安装插件
sudo yum install python2-certbot-nginx -y
sudo yum install nginx python3-certbot-nginx -y
# 通过cloudflare域名解析的可以安装插件
sudo apt install -y certbot python3-certbot-dns-cloudflare
# 确认 Certbot 版本支持 DNS 插件
certbot --version
配置 Cloudflare API 凭证
-
获取 Cloudflare API 密钥
- 登录 Cloudflare 控制台 → 个人资料 → API 令牌。
- 创建 API 令牌:选择 编辑区域 DNS 模板,权限选择
Zone.DNS: Edit,区域资源选择所有区域。
-
创建凭证文件
sudo mkdir -p /etc/letsencrypt/cloudflaresudo nano /etc/letsencrypt/cloudflare/cloudflare.ini内容格式:
dns_cloudflare_api_token = YOUR_API_TOKEN# 或者使用全局 API 密钥(不推荐)# dns_cloudflare_email = your@email.com# dns_cloudflare_api_key = YOUR_GLOBAL_API_KEY设置权限:
sudo chmod 600 /etc/letsencrypt/cloudflare/cloudflare.ini
申请泛域名证书
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare/cloudflare.ini \
--dns-cloudflare-propagation-seconds 20 \
--server https://acme-v02.api.letsencrypt.org/directory \
-d "hzy777.eu.org" \
-d "*.hzy777.eu.org"
- 参数说明:
--dns-cloudflare: 使用 Cloudflare DNS 插件。--dns-cloudflare-propagation-seconds: 等待 DNS 记录生效时间(默认 10 秒,可适当延长)。-d: 指定主域名和泛域名(*.hzy777.eu.org)。
nginx虚拟主机配置
/etc/nginx/nginx.conf
# HTTP 重定向到 HTTPS → 通用配置(可选)
server {
listen [::]:80;
server_name code.hzy777.eu.org;
return 301 https://$host$request_uri;
}
# HTTPS 虚拟主机配置
server {
listen [::]:443 ssl http2;
server_name code.hzy777.eu.org;
# SSL 证书(使用泛域名证书)
ssl_certificate /etc/letsencrypt/live/hzy777.eu.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/hzy777.eu.org/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
# 静态资源路径
root /var/www/code;
index index.html;
# 日志文件(按子域名独立)
access_log /var/log/nginx/code.access.log;
error_log /var/log/nginx/code.error.log;
# 其他配置
location / {
try_files $uri $uri/ =404;
}
# 可选:禁止访问隐藏文件
location ~ /\. {
deny all;
}
}
自动申请证书
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# -d 域名 可以多个
自动续约
sudo certbot renew --dry-run
通过 webroot 生成证书
certbot certonly --webroot -w 网站目录 -d 域名 [-w 网站目录 -d 域名]
# 证书存放目录:/etc/letsencrypt/live/域名/
自动更新
# 把下面命令加入定时器,每月执行,可达到自动更新的效果
certbot renew
申请单个域名(推荐)
sudo certbot certonly --manual --preferred-challenges=dns -d www.yourdomain.com
补充: 申请通配符域名证书
certbot-auto certonly -d *.example.com --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
sudo certbot certonly --manual --preferred-challenges=dns -d "*.yourdomain.com"
-d 申请证书的域名,如果是通配符域名输入 *.example.com
–manual 手动安装插件
–preferred-challenges dns 使用 DNS 方式校验域名所有权
–server,Let's Encrypt ACME v2 版本使用的服务器不同于 v1 版本,需要显示指定
提示:
解决already running问题
sudo find / -type f -name ".certbot.lock" -exec rm {} \;
续签问题
# 要在cloudfare添加TXT记录
certbot certonly --preferred-challenges dns-01 --manual -d code.hzy777.eu.org
关闭nginx解决占用80端口问题
# 停止nginx
service nginx stop
# 查看80端口占用进程的PID
netstat -tunlp | grep 80
lsof -i:80
# 结束进程
kill -9 PID
其他常用指令
确认当前证书使用情况
sudo certbot certificates
找到包含 code.hzy777.eu.org 的证书条目,记录证书名称(如 code.hzy777.eu.org)
删除证书
sudo certbot delete --cert-name code.hzy777.eu.org
手动清理残留文件(可选)
# 删除证书文件
sudo rm -rf /etc/letsencrypt/live/code.hzy777.eu.org
sudo rm -rf /etc/letsencrypt/archive/code.hzy777.eu.org
# 删除续期配置
sudo rm /etc/letsencrypt/renewal/code.hzy777.eu.org.conf