logo

Let's Encrypt 免费通配符 SSL 证书申请全攻略

作者:半吊子全栈工匠2025.10.13 13:35浏览量:152

简介:本文详细介绍如何通过Let's Encrypt申请免费通配符SSL证书,涵盖环境准备、证书申请、验证、安装及自动化续期等全流程,帮助开发者高效实现网站HTTPS加密。

Let’s Encrypt 免费通配符 SSL 证书申请全攻略

一、为什么选择 Let’s Encrypt 通配符证书?

Let’s Encrypt 作为全球最受欢迎的免费 SSL 证书颁发机构,其通配符证书(Wildcard SSL)具有以下核心优势:

  1. 全域名覆盖:单个证书可保护主域名及所有子域名(如 *.example.com),无需为每个子域名单独申请证书。
  2. 零成本:完全免费,适合个人开发者、初创企业及预算有限的项目。
  3. 自动化支持:支持 ACME 协议,可通过 Certbot 等工具实现证书自动申请与续期。
  4. 行业认可:由非营利组织 ISRG 运营,证书被所有主流浏览器信任。

二、申请前的环境准备

1. 服务器要求

  • 操作系统:支持 Linux(Ubuntu/CentOS/Debian 等)或 Windows Server(需 WSL 或 PowerShell 支持)。
  • Web 服务器:Nginx 或 Apache(需提前安装并运行)。
  • 域名控制权:需拥有域名的 DNS 管理权限,用于完成域名所有权验证。

2. 安装 Certbot 工具

Certbot 是 Let’s Encrypt 官方推荐的自动化工具,支持多种操作系统和 Web 服务器。

Ubuntu/Debian 安装示例:

  1. # 添加 Certbot 官方仓库
  2. sudo apt update
  3. sudo apt install certbot python3-certbot-nginx # Nginx 用户
  4. # 或
  5. sudo apt install certbot python3-certbot-apache # Apache 用户

CentOS/RHEL 安装示例:

  1. # 启用 EPEL 仓库
  2. sudo yum install epel-release
  3. # 安装 Certbot
  4. sudo yum install certbot python3-certbot-nginx # Nginx 用户
  5. # 或
  6. sudo yum install certbot python3-certbot-apache # Apache 用户

3. 配置 DNS 记录

申请通配符证书需通过 DNS 验证(DNS-01),需在域名 DNS 管理面板中添加一条 TXT 记录:

  • 记录类型:TXT
  • 主机名_acme-challenge
  • :由 Certbot 生成(后续步骤中获取)。

三、申请通配符证书的完整流程

1. 运行 Certbot 并选择 DNS 验证

  1. sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d "example.com"
  • --manual:手动模式(需手动完成 DNS 验证)。
  • --preferred-challenges dns:指定使用 DNS 验证。
  • -d:指定要保护的域名(支持多个)。

2. 完成 DNS 验证

运行命令后,Certbot 会输出一条 TXT 记录值(如 abc123...xyz),需在域名 DNS 管理面板中添加该记录:

  1. 登录域名注册商(如阿里云、Cloudflare、GoDaddy 等)。
  2. 找到 DNS 管理页面,添加 TXT 记录:
    • 主机名:_acme-challenge
    • 值:Certbot 提供的字符串。
  3. 保存记录后,等待 DNS 传播(通常需 1-5 分钟)。

3. 验证 DNS 记录并获取证书

返回终端,按提示确认 DNS 记录已添加后,Certbot 会完成验证并生成证书:

  • 证书文件路径:/etc/letsencrypt/live/example.com/
  • 关键文件:
    • fullchain.pem:包含证书和中间证书。
    • privkey.pem:私钥文件。

四、证书安装与配置

1. Nginx 配置示例

编辑 Nginx 配置文件(如 /etc/nginx/sites-available/example.com):

  1. server {
  2. listen 443 ssl;
  3. server_name example.com *.example.com;
  4. ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  5. ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  6. ssl_protocols TLSv1.2 TLSv1.3;
  7. ssl_ciphers HIGH:!aNULL:!MD5;
  8. # 其他配置(如根目录、日志等)
  9. root /var/www/html;
  10. index index.html;
  11. }

重启 Nginx:

  1. sudo systemctl restart nginx

2. Apache 配置示例

编辑 Apache 配置文件(如 /etc/apache2/sites-available/example.com.conf):

  1. <VirtualHost *:443>
  2. ServerName example.com
  3. ServerAlias *.example.com
  4. SSLEngine on
  5. SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
  6. SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
  7. # 其他配置(如文档根目录、日志等)
  8. DocumentRoot /var/www/html
  9. </VirtualHost>

重启 Apache:

  1. sudo systemctl restart apache2

五、自动化续期与维护

Let’s Encrypt 证书有效期为 90 天,需设置自动续期以避免过期。

1. 测试续期命令

  1. sudo certbot renew --dry-run

若输出 Success,则表示续期配置正确。

2. 设置定时任务

编辑 crontab:

  1. sudo crontab -e

添加以下行(每天凌晨 3 点检查续期):

  1. 0 3 * * * /usr/bin/certbot renew --quiet && sudo systemctl reload nginx # Nginx 用户
  2. # 或
  3. 0 3 * * * /usr/bin/certbot renew --quiet && sudo systemctl reload apache2 # Apache 用户

六、常见问题与解决方案

1. DNS 验证失败

  • 原因:TXT 记录未传播或值错误。
  • 解决
    1. 使用 dig TXT _acme-challenge.example.com 检查记录是否生效。
    2. 确保记录值与 Certbot 输出完全一致(包括空格和大小写)。

2. 证书覆盖范围不足

  • 问题:未包含根域名(如 example.com)。
  • 解决:在 -d 参数中同时指定根域名和通配符域名:
    1. sudo certbot certonly --manual --preferred-challenges dns -d "example.com" -d "*.example.com"

3. 自动化续期失败

  • 原因:Web 服务器未重启或证书路径错误。
  • 解决
    1. 确保续期命令后包含服务器重启命令(如 systemctl reload nginx)。
    2. 检查证书路径是否正确(/etc/letsencrypt/live/ 下对应域名目录)。

七、进阶技巧:使用 DNS 插件自动化验证

若手动 DNS 验证繁琐,可使用支持自动 DNS 更新的插件(如 Certbot 的 DNS 插件或 Acme.sh):

1. 使用 Certbot DNS 插件(以 Cloudflare 为例)

  1. 安装插件:
    1. sudo apt install certbot-dns-cloudflare # Ubuntu/Debian
  2. 获取 Cloudflare API 令牌并创建 ~/.secrets/cloudflare.ini
    1. dns_cloudflare_email = your@email.com
    2. dns_cloudflare_api_key = YOUR_CLOUDFLARE_API_TOKEN
  3. 运行申请命令:
    1. sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/cloudflare.ini -d "*.example.com" -d "example.com"

2. 使用 Acme.sh(支持更多 DNS 提供商)

  1. 安装 Acme.sh:
    1. curl https://get.acme.sh | sh
    2. source ~/.bashrc
  2. 以 DNS 模式申请证书(以阿里云为例):
    1. export Ali_Key="YOUR_ALIYUN_ACCESS_KEY"
    2. export Ali_Secret="YOUR_ALIYUN_SECRET_KEY"
    3. acme.sh --issue --dns dns_ali -d "*.example.com" -d "example.com"

八、总结与最佳实践

  1. 定期检查证书状态:使用 certbot certificates 查看证书有效期。
  2. 备份私钥:将 /etc/letsencrypt/archive/ 下的私钥文件备份至安全位置。
  3. 监控续期任务:确保 crontab 任务未被禁用,并检查日志(/var/log/letsencrypt/)。
  4. 多域名场景:若需保护多个通配符域名,可合并申请命令:
    1. sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d "example.com" -d "*.another.com" -d "another.com"

通过以上步骤,您可高效申请并管理 Let’s Encrypt 免费通配符 SSL 证书,为网站提供安全可靠的 HTTPS 加密服务。

相关文章推荐

发表评论

活动