简介

Let's Encrypt 是非营利性证书颁发机构,其使命是通过推动 HTTPS 的广泛应用,创建一个更加安全和尊重隐私的万维网。Let's Encrypt 的证书有效期为90天,在此期间可以随时更新。该项目采用自动化流程,旨在克服手动创建、验证、数字签名、安装和续期等繁琐步骤。该项目的目标是让万维网的加密连接普及化。通过省去支付费用、服务器配置、验证电子邮件管理和证书更新等任务,大大降低了设置和维护 TLS 加密的复杂性。本文旨在分享配置证书的方法。

配置 Let’s Encrypt SSL/TLS 证书

在 NGINX 上配置 Let’s Encrypt SSL/TLS 证书的具体操作步骤如下:

方法1(适用于 DNS 指向你的 IP 地址的情况):

  1. 安装 Certbot: Certbot 是 Let’s Encrypt 的官方客户端,用于自动获取和部署 SSL 证书。在 Ubuntu 上,可以使用以下命令安装 Certbot 及其 NGINX 插件:

    sudo apt update
    sudo apt install certbot python3-certbot-nginx
    
  2. 配置 NGINX: 确保你的 NGINX 配置文件中包含 server_name 指令,指向你要保护的域名。例如:

    server {
        listen 80;
        server_name example.com www.example.com;
        root /var/www/html;
    }
    
  3. 获取 SSL/TLS 证书: 使用 Certbot 的 NGINX 插件生成证书并自动配置 NGINX:

    sudo certbot --nginx -d example.com -d www.example.com
    

    按照提示输入你的电子邮件地址并同意服务条款。Certbot 会自动获取证书并配置 NGINX。

  4. 关于更新证书: Let’s Encrypt 证书有效期默认为 90 天,Certbot 会自动处理证书的更新。你可以通过以下两个命令分别手动测试自动更新以及手动更新:

    sudo certbot renew --dry-run
    sudo certbot certonly --standalone -d example.com -d www.example.com
    

方法2(DNS-01 验证):

  1. 安装 Certbot: 首先,确保您已经安装了 Certbot,这是一个常用的 ACME 客户端。您可以通过以下命令在 Ubuntu 上安装:

    sudo apt-get update
    sudo apt-get install certbot
    
  2. 生成 DNS-01 验证的挑战: 使用 Certbot 生成 DNS-01 验证所需的挑战。运行以下命令:

    sudo certbot certonly --manual --preferred-challenges dns -d yourdomain.com
    

    这将生成一个 TXT 记录,您需要将其添加到您的 DNS 配置中。

  3. 添加 TXT 记录: 登录到您的 DNS 提供商的管理控制台,找到您的域名的 DNS 设置,并添加一个新的 TXT 记录。记录的名称通常是 _acme-challenge.yourdomain.com,值是 Certbot 提供的字符串。

  4. 验证 DNS 记录: 添加 TXT 记录后,您可以使用以下命令来验证记录是否正确添加:

    nslookup -q=TXT _acme-challenge.yourdomain.com
    

    确认返回的 TXT 记录与 Certbot 提供的值匹配。

  5. 完成验证并获取证书: 返回到 Certbot 命令行,按 Enter 键继续。Certbot 将验证您添加的 TXT 记录,并在验证成功后颁发证书。

  6. 自动化更新(可选): 如果您的 DNS 提供商支持 API,您可以使用 Certbot 的插件来自动化 DNS-01 验证和证书更新。例如,对于 Cloudflare,您可以使用以下命令:

    sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d yourdomain.com
    

这些步骤可以帮助你在 NGINX 上轻松配置和管理 Let’s Encrypt SSL/TLS 证书。