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

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

2026年4月28日 160点热度 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 通配符证书 世界,您好!
Linux 使用systemd管理JAVA SpringBoot应用 Ubuntu22.04 使用 Certbot 申请 Let's Encrypt 通配符证书 世界,您好!
标签聚合
springboot systemd linux java

COPYRIGHT © 2026 . ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang