Post

Let's Encrypt SSL证书管理实战指南:从获取到自动续期

2026-04-30

使用 Let’s Encrypt 部署免费 SSL 证书及自动续期方案

概述

本文详细说明如何通过 Let’s Encrypt 获取免费 SSL 证书、部署到 Nginx 服务器,并配置自动续期方案。重点涵盖证书申请流程、Nginx 配置要点、续期策略及常见部署陷阱。


核心概念

Let’s Encrypt 是由非营利组织 ISRG 运营的免费 SSL 证书服务,通过自动化工具实现证书申请、部署和续期。其证书有效期为 90 天,需用户主动续期以避免服务中断。


证书申请与部署流程

准备工作

  1. 安装依赖
    确保系统已安装 git 和 Python 2.7+(部分旧版脚本依赖):

    git --version  # 检查 git 是否安装
    yum install git  # CentOS 系统安装示例
    python -V      # 验证 Python 版本
    
  2. 获取 Let’s Encrypt 工具
    通过 Git 克隆官方仓库:

    git clone https://github.com/letsencrypt/letsencrypt
    cd letsencrypt
    

证书生成方法

方法一:交互式申请

./letsencrypt-auto

按提示输入邮箱地址、选择域名(支持多域名用空格分隔),完成验证后证书会生成在 /etc/letsencrypt/live/your_domain/ 目录。

方法二:命令行直接申请

./letsencrypt-auto certonly --standalone --email your_email@example.com -d your_domain -d www.your_domain

Nginx 配置 SSL 证书

生成的证书文件包含以下关键文件:

  • fullchain.pem:Nginx 需要的完整证书链
  • privkey.pem:私钥文件

在 Nginx 配置文件中启用 HTTPS 服务:

server {
    listen 443 ssl;
    server_name your_domain;

    ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;

    # 其他配置...
}

自动续期方案

手动续期命令

./letsencrypt-auto certonly --renew-by-default --email your_email@example.com -d your_domain -d www.your_domain

自动化脚本配置

创建续期脚本 renewCerts.sh

#!/bin/sh
if ! /opt/letsencrypt/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then
    echo "续期失败:"
    cat /var/log/letsencrypt/renew.log
    exit 1
fi

设置执行权限并配置 cron

chmod +x renewCerts.sh
crontab -e
# 添加以下行,每月1日凌晨执行
0 0 1 * * /bin/sh /opt/renewCerts.sh

常见问题与注意事项

  1. 证书申请限制

    • 每周申请次数有限(避免频繁删除重申请)
    • 国内服务器需确保 443 端口对外可访问(如阿里云需手动放行)
  2. Nginx 配置残留
    删除旧证书时需彻底清理:

    rm -rf /etc/letsencrypt/live/www.example.com/
    rm -rf /etc/letsencrypt/archive/www.example.com/
    rm /etc/letsencrypt/renewal/www.example.com.conf
    
  3. 证书续期失败排查

    • 检查 renew.log 日志文件
    • 确保脚本路径与 letsencrypt-auto 一致
    • 避免在证书到期前 7 天内执行续期(续期窗口为到期前 30 天)

总结

Let’s Encrypt 提供了免费且自动化程度高的 SSL 证书解决方案,但需用户主动管理续期流程。通过脚本化部署和 cron 定时任务,可有效降低运维成本。部署时需特别注意服务器端口开放策略和 Nginx 配置的准确性,避免因环境问题导致证书失效。