跳到主要内容

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 凭证

  1. 获取 Cloudflare API 密钥

    • 登录 Cloudflare 控制台 → 个人资料API 令牌
    • 创建 API 令牌:选择 编辑区域 DNS 模板,权限选择 Zone.DNS: Edit,区域资源选择 所有区域
  2. 创建凭证文件

    sudo mkdir -p /etc/letsencrypt/cloudflare
    sudo 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