博客 | NGINX

更新: 在 NGINX 中使用免费的 Let’s Encrypt SSL/TLS 证书

NGINX-F5-horiz-black-type-RGB 的一部分
Amir Rawdat 缩略图
阿米尔·罗达特
2021 年 1 月 28 日发布

编辑者 – 详细介绍使用 Let’s Encrypt 和 NGINX 的原始程序(自 2016 年 2 月起)的博客文章重定向至此处。 该帖子中的说明已被弃用。

此帖子已更新,以消除对certbot‑auto的依赖,电子前沿联盟 (EFF) 在 Debian 和 Ubuntu 的Certbot 1.10.0以及所有其他操作系统的Certbot 1.11.0中已弃用该功能。 有关更多详细信息和其他安装方法,请参阅EFF 的这篇文章

另请参阅我们 2015 年 nginx.conf 中的博客文章,其中电子前沿基金会的 Peter Eckersley 和 Yan Zhu介绍了当时新推出的 Let's Encrypt 证书颁发机构

众所周知,对您的网站进行 SSL/TLS 加密可以提高搜索排名并为用户提供更好的安全性。 然而,有许多障碍阻碍网站所有者采用 SSL。

其中最大的两个障碍是获取证书的成本和手动流程。 但是现在,有了Let's Encrypt ,这些问题就不再是问题了。 Let's Encrypt 让每个人都可以免费使用 SSL/TLS 加密。

Let’s Encrypt 是一个免费、自动化、开放的证书颁发机构 (CA)。 是的,没错: 免费的 SSL/TLS 证书。 目前,大多数浏览器都信任 Let’s Encrypt 颁发的证书,包括 Windows XP SP3 上的 Internet Explorer 等旧版浏览器。 此外,Let’s Encrypt 完全自动化了证书的颁发和更新。

在这篇博文中,我们介绍了如何使用 Let’s Encrypt 客户端生成证书以及如何自动配置 NGINX Open Source 和 NGINX Plus 来使用它们。

Let’s Encrypt 的工作原理

在颁发证书之前,Let’s Encrypt 会验证您对域名的所有权。 在您的主机上运行的 Let’s Encrypt 客户端会创建一个包含所需信息的临时文件(令牌)。 然后,Let’s Encrypt 验证服务器会发出 HTTP 请求来检索文件并验证令牌,这会验证您域的 DNS 记录是否解析为运行 Let’s Encrypt 客户端的服务器。

先决条件

在开始使用 Let’s Encrypt 之前,您需要:

  • 已安装NGINXNGINX Plus
  • 拥有或控制证书的注册域名。 如果您没有注册域名,您可以使用域名注册商,例如GoDaddydnsexit
  • 创建一个将您的域名与服务器的公共 IP 地址关联的 DNS 记录。

现在,您可以轻松地使用 NGINX Open Source 或 NGINX Plus 设置 Let's Encrypt(为了方便阅读,从现在开始我们将简称为NGINX )。

笔记: 我们在 Ubuntu 16.04(Xenial)上测试了本博文中概述的程序。

1. 下载 Let’s Encrypt 客户端

首先,下载 Let's Encrypt 客户端certbot

如上所述,我们在 Ubuntu 16.04 上测试了说明,这些是该平台上的适当命令:

$ apt-get 更新$ sudo apt-get 安装 certbot $ apt-get 安装 python-certbot-nginx

使用 Ubuntu 18.04 及更高版本,替换 Python 3 版本:

$ apt-get 更新$ sudo apt-get 安装 certbot $ apt-get 安装 python3-certbot-nginx

2. 设置NGINX

certbot可以自动为 NGINX 配置 SSL/TLS。 它会查找并修改 NGINX 配置中的服务器块,其中包含带有您要为其申请证书的域名的server_name指令。 在我们的示例中,域名是www.example.com

  1. 假设您从全新安装的 NGINX 开始,请使用文本编辑器在/etc/nginx/conf.d目录中创建一个名为domain‑name .conf的文件(在我们的示例中为www.example.com.conf )。

  2. 使用server_name指令指定您的域名(及变体,如果有):

    服务器 { listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name example.com www.example.com;
    }
  3. 保存文件,然后运行此命令来验证配置的语法并重新启动 NGINX:

    $ nginx -t && nginx -s 重新加载

3. 获取 SSL/TLS 证书

certbot的 NGINX 插件负责在必要时重新配置 NGINX 并重新加载其配置。

  1. 运行以下命令使用 NGINX 插件生成证书:

    $ sudo certbot --nginx -d example.com -d www.example.com
  2. 响应certbot的提示来配置您的 HTTPS 设置,其中包括输入您的电子邮件地址并同意 Let's Encrypt 服务条款。

  3. 当证书生成完成后, NGINX将使用新设置重新加载。certbot 会生成一条消息,表明证书生成成功并指定证书在服务器上的位置。

    恭喜! 您已成功启用 https://example.com 和 https://www.example.com 
    ------------------------------------------------------------------------------------------------
    重要说明: 
    
    恭喜! 您的证书和链已保存在:
    /etc/letsencrypt/live/example.com/fullchain.pem
    您的密钥文件已保存在:
    /etc/letsencrypt/live/example.com//privkey.pem
    您的证书将于 2017-12-12 到期。

    笔记: Let's Encrypt 证书将在 90 天后过期(示例中为 2017-12-12)。 有关自动续订证书的信息,请参阅下面的Let's Encrypt 证书自动续订

如果你查看domain‑name .conf ,你会看到certbot对其进行了修改:

服务器 { listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name example.com www.example.com;

listen 443 ssl; # 由 Certbot 管理

# RSA 证书
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # 由 Certbot 管理
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 由 Certbot 管理

include /etc/letsencrypt/options-ssl-nginx.conf; # 由 Certbot 管理

# 将非 https 流量重定向到 https
if ($scheme != "https") {
return 301 https://$host$request_uri;
} # 由 Certbot 管理
}

4. 自动续订 Let’s Encrypt 证书

Let's Encrypt 证书 90 天后过期。 我们鼓励您自动更新您的证书。 这里我们将一个cron作业添加到现有的crontab文件中来执行此操作。

  1. 打开crontab文件。

    $ crontab -e
  2. 添加certbot命令以每天运行。 在这个例子中,我们每天中午运行该命令。 该命令检查服务器上的证书是否会在未来 30 天内过期,如果是,则进行更新。 --quiet指令告诉certbot不要生成输出。

    0 12 * * * /usr/bin/certbot 更新--quiet
  3. 保存并关闭文件。 所有已安装的证书将自动更新并重新加载。

  4. 概括

    我们已经安装了 Let’s Encrypt 代理来为注册的域名生成 SSL/TLS 证书。 我们已配置 NGINX 以使用证书并设置自动证书更新。 借助 NGINX 和 NGINX Plus 的 Let’s Encrypt 证书,您可以在几分钟内建立并运行一个简单、安全的网站。

    要亲自尝试使用 NGINX Plus 的 Let's Encrypt,请立即开始30 天免费试用,或联系我们讨论您的用例

    相关文档

    保护到上游服务器的 HTTP 流量
    保护到上游服务器的 TCP 流量
    NGINX SSL 终止


“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”