编辑者 – 详细介绍使用 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 验证服务器会发出 HTTP 请求来检索文件并验证令牌,这会验证您域的 DNS 记录是否解析为运行 Let’s Encrypt 客户端的服务器。
在开始使用 Let’s Encrypt 之前,您需要:
现在,您可以轻松地使用 NGINX Open Source 或 NGINX Plus 设置 Let's Encrypt(为了方便阅读,从现在开始我们将简称为NGINX )。
笔记: 我们在 Ubuntu 16.04(Xenial)上测试了本博文中概述的程序。
首先,下载 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
certbot
可以自动为 NGINX 配置 SSL/TLS。 它会查找并修改 NGINX 配置中的服务器
块,其中包含带有您要为其申请证书的域名的server_name
指令。 在我们的示例中,域名是www.example.com 。
假设您从全新安装的 NGINX 开始,请使用文本编辑器在/etc/nginx/conf.d目录中创建一个名为domain‑name .conf的文件(在我们的示例中为www.example.com.conf )。
使用server_name
指令指定您的域名(及变体,如果有):
服务器 { listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name example.com www.example.com;
}
保存文件,然后运行此命令来验证配置的语法并重新启动 NGINX:
$ nginx -t && nginx -s 重新加载
certbot
的 NGINX 插件负责在必要时重新配置 NGINX 并重新加载其配置。
运行以下命令使用 NGINX 插件生成证书:
$ sudo certbot --nginx -d example.com -d www.example.com
响应certbot
的提示来配置您的 HTTPS 设置,其中包括输入您的电子邮件地址并同意 Let's Encrypt 服务条款。
当证书生成完成后, 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 管理
}
Let's Encrypt 证书 90 天后过期。 我们鼓励您自动更新您的证书。 这里我们将一个cron
作业添加到现有的crontab文件中来执行此操作。
打开crontab文件。
$ crontab -e
添加certbot
命令以每天运行。 在这个例子中,我们每天中午运行该命令。 该命令检查服务器上的证书是否会在未来 30 天内过期,如果是,则进行更新。 --quiet
指令告诉certbot
不要生成输出。
0 12 * * * /usr/bin/certbot 更新--quiet
保存并关闭文件。 所有已安装的证书将自动更新并重新加载。
我们已经安装了 Let’s Encrypt 代理来为注册的域名生成 SSL/TLS 证书。 我们已配置 NGINX 以使用证书并设置自动证书更新。 借助 NGINX 和 NGINX Plus 的 Let’s Encrypt 证书,您可以在几分钟内建立并运行一个简单、安全的网站。
要亲自尝试使用 NGINX Plus 的 Let's Encrypt,请立即开始30 天免费试用,或联系我们讨论您的用例。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”