前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
Let’s Encrypt 是一个证书颁发机构(CA),提供了一种简单的方式来获取和安装免费的 TLS/SSL 证书,从而在 Web 服务器上启用加密的 HTTPS。它通过提供一个软件客户端 Certbot 来简化这个过程,试图自动化大部分(如果不是全部)所需的步骤。目前,在 Apache 和 Nginx 上获取和安装证书的整个过程都是完全自动化的。
在本教程中,您将使用 Certbot 在 Ubuntu 16.04 上为 Nginx 获取免费的 SSL 证书,并设置证书自动续期。
本教程使用默认的 Nginx 配置文件,而不是单独的服务器块文件。我们建议为每个域创建新的 Nginx 服务器块文件,因为这有助于避免一些常见的错误,并将默认文件保持为备用配置,以便按照预期的方式进行。如果您想使用服务器块来设置 SSL,可以参考这篇 Nginx 服务器块与 Let’s Encrypt 教程。
先决条件
要按照本教程操作,您需要:
- 通过按照 Ubuntu 16.04 初始服务器设置教程 设置的一个 Ubuntu 16.04 服务器,包括一个 sudo 非根用户和防火墙。
- 一个完全注册的域名。本教程将始终使用
example.com
。您可以在 Namecheap 购买域名,在 Freenom 免费获取域名,或者使用您选择的域名注册商。 - 为您的服务器设置了以下两个 DNS 记录。您可以参考这篇主机名教程了解如何添加它们的详细信息。
- 一个 A 记录,将
example.com
指向您服务器的公共 IP 地址。 - 一个 A 记录,将
www.example.com
指向您服务器的公共 IP 地址。
- 一个 A 记录,将
- 通过按照在 Ubuntu 16.04 上安装 Nginx 教程 安装了 Nginx。
步骤 1 — 安装 Certbot
使用 Let’s Encrypt 获取 SSL 证书的第一步是在服务器上安装 Certbot 软件。
Certbot 处于非常活跃的开发中,因此 Ubuntu 提供的 Certbot 软件包往往已经过时。但是,Certbot 的开发人员维护了一个 Ubuntu 软件仓库,其中包含最新版本,因此我们将使用该仓库。
首先,添加该仓库。
sudo add-apt-repository ppa:certbot/certbot
您需要按 ENTER
来接受。然后,更新软件包列表以获取新仓库的软件包信息。
sudo apt-get update
最后,使用 apt-get
安装 Certbot 的 Nginx 软件包。
sudo apt-get install python-certbot-nginx
Certbot 现在已经准备就绪,但为了让它为 Nginx 配置 SSL,我们需要验证一些 Nginx 的配置。
步骤 2 — 设置 Nginx
Certbot 可以自动为 Nginx 配置 SSL,但它需要能够找到您配置中正确的 server
块。它通过查找与您请求证书的域名匹配的 server_name
指令来实现这一点。
如果您刚开始使用全新的 Nginx 安装,可以更新默认配置文件。使用 nano
或您喜欢的文本编辑器打开它。
sudo nano /etc/nginx/sites-available/default
找到现有的 server_name
行,并将下划线 _
替换为您的域名:
. . .
server_name example.com www.example.com;
. . .
保存文件并退出编辑器。
然后,验证您的配置编辑的语法。
sudo nginx -t
如果出现任何错误,请重新打开文件检查拼写错误,然后再次测试。
一旦您的配置语法正确,重新加载 Nginx 以加载新配置。
sudo systemctl reload nginx
Certbot 现在将能够找到正确的 server
块并更新它。接下来,我们将更新防火墙以允许 HTTPS 流量。
步骤 3 — 允许防火墙通过 HTTPS
如果您已经启用了 ufw
防火墙,如先决条件指南中建议的,您需要调整设置以允许 HTTPS 流量。幸运的是,Nginx 在安装时会向 ufw
注册一些配置文件。
您可以通过输入以下命令查看当前设置:
sudo ufw status
它可能看起来像这样,意味着只有 HTTP 流量被允许到 Web 服务器:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
为了额外允许 HTTPS 流量,我们可以允许 Nginx Full 配置文件,然后删除多余的 Nginx HTTP 配置文件允许:
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
现在您的状态应该是这样的:
sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
现在我们已经准备好运行 Certbot 并获取我们的证书。
步骤 4 —— 获取 SSL 证书
Certbot 提供了多种获取 SSL 证书的方式,通过各种插件。Nginx 插件将负责在必要时重新配置 Nginx 并重新加载配置:
sudo certbot --nginx -d example.com -d www.example.com
这将使用 --nginx
插件运行 certbot
,使用 -d
来指定证书要生效的域名。
如果这是你第一次运行 certbot
,系统会提示你输入电子邮件地址并同意服务条款。在这样做之后,certbot
将与 Let’s Encrypt 服务器通信,然后运行一个挑战来验证你控制你正在请求证书的域名。
如果成功,certbot
将询问你如何配置 HTTPS 设置。
请选择是否将 HTTP 流量重定向到 HTTPS,删除 HTTP 访问。
-------------------------------------------------------------------------------
1: 不重定向 - 对 web 服务器配置不做进一步更改。
2: 重定向 - 使所有请求重定向到安全的 HTTPS 访问。对于新站点或者您对站点在 HTTPS 上运行有信心,请选择此项。您可以通过编辑您的 web 服务器配置来撤消此更改。
-------------------------------------------------------------------------------
选择适当的数字 [1-2] 然后 [enter] (按 'c' 取消):
选择你的选择然后按 ENTER
。配置将被更新,Nginx 将重新加载以应用新的设置。certbot
将以一条消息告诉你过程成功,并告诉你证书存储在哪里:
重要提示:
- 恭喜!您的证书和链已保存在
/etc/letsencrypt/live/example.com/fullchain.pem。您的证书将
在 2017-10-23 过期。要在将来获取新的或调整过的版本
证书,只需再次使用 "certonly" 选项运行 certbot。要非交互式地更新 *所有* 您的
证书,请运行 "certbot renew"
- 您的帐户凭据已保存在您的 Certbot
配置目录 /etc/letsencrypt。您现在应该对此文件夹进行安全备份。此配置目录还将
包含 Certbot 获取的证书和私钥,因此定期备份此文件夹是理想的。
- 如果您喜欢 Certbot,请考虑支持我们的工作:
向 ISRG / Let's Encrypt 捐赠: https://letsencrypt.org/donate
向 EFF 捐赠: https://eff.org/donate-le
你的证书已下载、安装和加载。尝试使用 https://
重新加载你的网站,并注意你的浏览器安全指示器。它应该指示网站已经得到了适当的安全保护,通常会有一个绿色的锁图标。如果你使用 SSL Labs 服务器测试测试你的服务器,它将获得一个 A 等级。
让我们通过测试续订过程来结束。
步骤 5 —— 验证 Certbot 自动续订
Let’s Encrypt 的证书只在九十天内有效。这是为了鼓励用户自动化他们的证书续订过程。我们安装的 certbot
软件包通过 systemd 定时器每天两次运行 ‘certbot renew’ 来为我们处理这个问题。在非 systemd 发行版上,这个功能是通过放置在 /etc/cron.d
中的脚本提供的。这个任务每天运行两次,将续订任何在到期前三十天内的证书。
要测试续订过程,你可以使用 certbot
进行干运行:
sudo certbot renew --dry-run
如果没有错误,你就设置好了。在必要时,Certbot 将续订你的证书并重新加载 Nginx 以应用更改。如果自动续订过程失败,Let’s Encrypt 将发送一封消息到你指定的电子邮件,警告你的证书即将过期。
结论
在本教程中,你安装了 Let’s Encrypt 客户端 certbot
,为你的域名下载了 SSL 证书,配置了 Nginx 来使用这些证书,并设置了自动证书续订。如果你对使用 Certbot 有进一步的问题,他们的文档是一个很好的起点。