• 首页
  • 示例页面
  1. 首页
  2. 未分类
  3. 正文

Ubuntu22.04 使用 Certbot 申请 Let's Encrypt 通配符证书

2026年4月28日 4点热度 0人点赞 0条评论

一、前言

通配符证书(Wildcard Certificate)可以用一个证书保护同一主域名下的所有子域名,例如 *.dwq1.com 可以覆盖 blog.dwq1.com、api.dwq1.com 等等。Let's Encrypt 免费且支持通配符证书(需使用 DNS 验证),配合 Certbot 工具,整个申请和续期过程非常丝滑。

本文将介绍在 Ubuntu 22.04 上使用 Certbot 申请 Let's Encrypt 通配符证书的两种方式:

  • Nginx 验证:适用于已经使用 Nginx 提供 HTTP 服务的场景(但注意:通配符证书 必须 使用 DNS 验证,Nginx/HTTP 验证无法申请通配符证书。Nginx 验证适用于普通单域名/多域名证书)
  • AliDNS 验证:通过阿里云 DNS API 自动完成 DNS 挑战,适合通配符证书和自动化续期

二、环境准备

2.1 安装 Certbot 和 Nginx 插件

# 更新软件源并安装
sudo apt update
sudo apt install -y certbot python3-certbot-nginx

# 检查版本
certbot --version

2.2 安装 Certbot DNS 插件

# 阿里云 DNS 插件
sudo apt install -y python3-certbot-dns-aliyun

# 或者通过 pip 安装(如果 apt 仓库没有)
sudo apt install -y python3-pip
sudo pip3 install certbot-dns-aliyun

三、方式一:Nginx 验证(适用于普通单域/多域证书)

⚠️ 重要提醒:Let's Encrypt 的 Nginx/HTTP 验证不支持通配符证书,通配符证书只能使用 DNS 验证。本节适用于申请普通单域名或多域名证书的场景。

3.1 前置条件

  • Nginx 已安装并运行
  • 域名已解析到服务器 IP
  • 服务器 80 端口可公网访问

3.2 启动 Certbot Nginx 插件

# 交互式申请(会自动修改 Nginx 配置)
sudo certbot --nginx -d dwq1.com -d www.dwq1.com

# 仅申请证书,不修改 Nginx 配置
sudo certbot certonly --nginx -d dwq1.com -d www.dwq1.com

3.3 手动指定证书目录

Certbot 成功后,证书存放在:

# 证书文件
/etc/letsencrypt/live/dwq1.com/fullchain.pem
# 私钥文件
/etc/letsencrypt/live/dwq1.com/privkey.pem

3.4 Nginx 配置 SSL

server {
    listen 443 ssl http2;
    server_name dwq1.com www.dwq1.com;

    ssl_certificate     /etc/letsencrypt/live/dwq1.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dwq1.com/privkey.pem;

    # 推荐的安全配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    root /var/www/html;
    index index.html;
}

# HTTP 自动跳转 HTTPS(certbot --nginx 会自动添加)
server {
    listen 80;
    server_name dwq1.com www.dwq1.com;
    return 301 https://$host$request_uri;
}

3.5 测试并重载

# 测试 Nginx 配置语法是否正确
sudo nginx -t

# 重载 Nginx
sudo systemctl reload nginx

四、方式二:AliDNS 验证(适用于通配符证书)

通配符证书必须使用 DNS 验证,通过在域名中设置特定的 TXT 记录来证明域名所有权。

4.1 获取阿里云 AccessKey

  1. 登录 RAM 访问控制
  2. 创建子用户,授予 AliyunDNSFullAccess 权限
  3. 获取 AccessKey ID 和 AccessKey Secret

4.2 创建阿里云 AccessKey 凭证文件

# 创建凭证目录和文件(权限设为 600 保护密钥)
sudo mkdir -p /etc/letsencrypt/
sudo tee /etc/letsencrypt/aliyun.ini << 'EOF'
dns_aliyun_access_key = 你的AccessKeyID
dns_aliyun_access_key_secret = 你的AccessKeySecret
EOF

sudo chmod 600 /etc/letsencrypt/aliyun.ini

4.3 申请通配符证书

# 使用 AliDNS 插件申请通配符证书
certbot certonly --dns-aliyun \
  --dns-aliyun-credentials /etc/letsencrypt/aliyun.ini \
  -d "dwq1.com" \
  -d "*.dwq1.com"

Certbot 会自动通过阿里云 API 添加和删除 TXT 记录,全程无需手动操作。等待 DNS 记录生效后即可完成验证。

4.4 验证证书内容

# 查看证书信息
certbot certificates

# 检查通配符域名是否包含在内
certbot certificates | grep -A5 dwq1.com

输出应包含类似如下信息:

Certificate Name: dwq1.com
Domains: dwq1.com *.dwq1.com
Expiry Date: 2026-07-27 12:00:00
Certificate Path: /etc/letsencrypt/live/dwq1.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/dwq1.com/privkey.pem

五、Nginx 配置通配符证书

通配符证书配置与普通证书完全相同:

server {
    listen 443 ssl http2;
    server_name *.dwq1.com dwq1.com;

    ssl_certificate     /etc/letsencrypt/live/dwq1.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dwq1.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    root /var/www/html;
    index index.html;
}

六、自动续期

Let's Encrypt 证书有效期 90 天,建议每天执行一次续期检查:

6.1 配置 Cron 任务

# 编辑 crontab
sudo crontab -e

# 添加以下内容(每天凌晨 3 点执行续期检查,成功后重载 Nginx)
0 3 * * * certbot renew --quiet --deploy-hook "systemctl reload nginx"

6.2 手动测试续期

# 模拟续期(不会真正续期,仅测试配置)
sudo certbot renew --dry-run

# 强制续期(即使未到期也会续期,适用于切换验证方式后测试)
sudo certbot renew --force-renewal

七、常见问题

7.1 通配符证书为什么不能用 Nginx/HTTP 验证?

Let's Encrypt 协议规定:通配符证书只能通过 DNS-01 挑战验证。这是为了确保证书申请者真正拥有该域名的控制权,防止恶意通配符证书签发。

7.2 DNS 验证失败怎么办?

检查以下几点:

  • AccessKey 权限是否正确(至少需要 AliyunDNSFullAccess)
  • 凭证文件格式是否正确
  • 域名是否在阿里云管理(跨平台需要对应 DNS 插件)
  • 检查日志:cat /var/log/letsencrypt/letsencrypt.log

7.3 证书吊销

# 吊销证书
sudo certbot revoke --cert-path /etc/letsencrypt/live/dwq1.com/cert.pem

# 吊销后删除证书
sudo certbot delete --cert-name dwq1.com

八、总结

验证方式 支持通配符 自动化程度 适用场景
Nginx 验证 ❌ 不支持 ✅ 全自动 普通单域/多域证书
AliDNS 验证 ✅ 支持 ✅ 全自动 通配符证书、多域名证书

推荐做法:使用 AliDNS 验证 + Cron 自动续期,一次配置后完全无需人工干预,通配符证书覆盖所有子域名,省心省力。

标签: 暂无
最后更新:2026年4月28日

dwq

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

dwq

这个人很懒,什么都没留下

文章目录
  • 一、前言
  • 二、环境准备
    • 2.1 安装 Certbot 和 Nginx 插件
    • 2.2 安装 Certbot DNS 插件
  • 三、方式一:Nginx 验证(适用于普通单域/多域证书)
    • 3.1 前置条件
    • 3.2 启动 Certbot Nginx 插件
    • 3.3 手动指定证书目录
    • 3.4 Nginx 配置 SSL
    • 3.5 测试并重载
  • 四、方式二:AliDNS 验证(适用于通配符证书)
    • 4.1 获取阿里云 AccessKey
    • 4.2 创建阿里云 AccessKey 凭证文件
    • 4.3 申请通配符证书
    • 4.4 验证证书内容
  • 五、Nginx 配置通配符证书
  • 六、自动续期
    • 6.1 配置 Cron 任务
    • 6.2 手动测试续期
  • 七、常见问题
    • 7.1 通配符证书为什么不能用 Nginx/HTTP 验证?
    • 7.2 DNS 验证失败怎么办?
    • 7.3 证书吊销
  • 八、总结
最新 热点 随机
最新 热点 随机
Linux 使用systemd管理JAVA SpringBoot应用 Ubuntu22.04 使用 Certbot 申请 Let's Encrypt 通配符证书 世界,您好!
世界,您好!Ubuntu22.04 使用 Certbot 申请 Let's Encrypt 通配符证书Linux 使用systemd管理JAVA SpringBoot应用
Linux 使用systemd管理JAVA SpringBoot应用 世界,您好! Ubuntu22.04 使用 Certbot 申请 Let's Encrypt 通配符证书
标签聚合
systemd linux springboot java

COPYRIGHT © 2026 . ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang