如何在Ubuntu18.04上使用Let'sEncrypt保护Nginx
介绍
Let's Encrypt 是一个证书颁发机构 (CA),它提供了一种获取和安装免费 TLS/SSL 证书 的方法,从而在 Web 服务器上启用加密的 HTTPS。 它通过提供软件客户端 Certbot 来简化流程,该客户端尝试自动化大部分(如果不是全部)所需步骤。 目前,获取和安装证书的整个过程在 Apache 和 Nginx 上都是完全自动化的。
在本教程中,您将使用 Certbot 在 Ubuntu 18.04 上为 Nginx 获取免费的 SSL 证书,并将您的证书设置为自动更新。
本教程将使用单独的 Nginx 服务器块文件而不是默认文件。 我们建议 为每个域 创建新的 Nginx 服务器块文件,因为它有助于避免常见错误并维护默认文件作为后备配置。
先决条件
要遵循本教程,您将需要:
- 按照此 Ubuntu 18.04 初始服务器设置教程设置一台 Ubuntu 18.04 服务器,包括 sudo 非 root 用户和防火墙。
- 完全注册的域名。 本教程将自始至终使用 your_domain。 您可以在 Namecheap 上购买一个域名,在 Freenom 上免费获得一个域名,或者使用您选择的域名注册商。
- 为您的服务器设置了以下两个 DNS 记录。 您可以关注这个DigitalOcean DNS的介绍,详细了解如何添加它们。
- 带有
your_domain
的 A 记录指向您服务器的公共 IP 地址。 - 带有
www.your_domain
的 A 记录指向您服务器的公共 IP 地址。
- 带有
- 按照 How To Install Nginx on Ubuntu 18.04 安装 Nginx。 确保您的域具有 服务器块 。 同样,本教程将使用
/etc/nginx/sites-available/your_domain
作为示例。
第 1 步 — 安装 Certbot
使用 Let's Encrypt 获取 SSL 证书的第一步是在您的服务器上安装 Certbot 软件。
Certbot 项目建议大多数用户通过 snap
安装软件,这是一个包管理器,最初由 Canonical(Ubuntu 背后的公司)开发,现在可用于许多 Linux 发行版:
sudo snap install --classic certbot
您的输出将显示 Certbot 的当前版本并成功安装:
Output certbot 1.21.0 from Certbot Project (certbot-eff✓) installed
接下来,从 /usr/bin/
目录创建指向新安装的 /snap/bin/certbot
可执行文件的符号链接。 这将确保 certbot
命令可以在您的服务器上正确运行。 为此,请运行以下 ln
命令。 这包含 -s
标志,它将创建符号或 软 链接,而不是 硬链接 :
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Certbot 现在可以使用了,但是为了让它为 Nginx 配置 SSL,你需要验证 Nginx 的一些配置。
第 2 步 - 确认 Nginx 的配置
Certbot 需要能够在 Nginx 配置中找到正确的 server
块,才能自动配置 SSL。 具体来说,它通过搜索与您为其请求证书的域匹配的 server_name
指令来执行此操作。
如果您按照 Nginx 安装教程 中推荐的 服务器块设置步骤进行操作,您将在 /etc/nginx/sites-available/your_domain
处为您的域提供一个服务器块,其中 server_name
指令已正确设置.
要检查,请使用 nano
或您喜欢的文本编辑器打开您的域的服务器块文件:
sudo nano /etc/nginx/sites-available/your_domain
找到现有的 server_name
行。 它应该如下所示:
/etc/nginx/sites-available/your_domain
... server_name your_domain www.your_domain; ...
如果是,请退出编辑器并继续下一步。
如果没有,请更新它以匹配。 然后保存文件并退出编辑器。 如果您使用的是 nano
,您可以通过按 CTRL + X
然后按 Y
和 ENTER
来执行此操作。
现在验证配置编辑的语法:
sudo nginx -t
如果出现错误,请重新打开服务器块文件并检查是否有任何拼写错误或缺少字符。 配置文件语法正确后,重新加载 Nginx 以加载新配置:
sudo systemctl reload nginx
Certbot 现在可以找到正确的 server
块并对其进行更新。
接下来,您将更新防火墙以允许 HTTPS 流量。
第 3 步 — 允许 HTTPS 通过防火墙
如果按照先决条件指南的建议启用了 ufw
防火墙,则需要调整设置以允许 HTTPS 流量。 幸运的是,Nginx 在安装时使用 ufw
注册了一些配置文件。
您可以通过运行以下命令检查当前设置:
sudo ufw status
您应该会收到这样的输出,表明只允许 HTTP 流量进入 Web 服务器:
OutputStatus: 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'
现在,当您运行 ufw status
命令时,它将反映这些新规则:
sudo ufw status
OutputStatus: 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 your_domain -d your_domain
这将使用 --nginx
插件运行 certbot
,使用 -d
指定您希望证书有效的名称。
如果这是您第一次运行 certbot
,系统将提示您输入电子邮件地址并同意服务条款。 完成此操作后,certbot
将与 Let's Encrypt 服务器通信,为您的域请求证书。 如果成功,您将收到以下输出:
Output Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-01-27. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/nginx/sites-enabled/your_domain Successfully deployed certificate for www.your_domain to /etc/nginx/sites-enabled/your_domain Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
您的证书已下载、安装和加载。 尝试使用 https://
重新加载您的网站,并注意浏览器的安全指示器。 它应该表明该站点已得到适当保护,通常带有绿色锁图标。 如果您使用 SSL Labs Server Test 测试您的服务器,它将获得 A 等级。
现在您已经获得了 SSL 证书,最后一步是测试续订过程。
第 5 步 — 验证 Certbot 自动续订
Let's Encrypt 的证书有效期只有九十天。 这是为了鼓励用户自动化他们的证书更新过程。 您安装的 certbot
软件包通过将更新脚本添加到 /etc/cron.d
来解决此问题。 此脚本每天运行两次,并将自动更新到期后三十天内的任何证书。
要测试更新过程,您可以使用 certbot
进行试运行:
sudo certbot renew --dry-run
如果您没有收到错误,则一切就绪。 必要时,Certbot 将更新您的证书并重新加载 Nginx 以获取更改。 如果自动续订过程失败,Let's Encrypt 将向您指定的电子邮件发送一条消息,在您的证书即将到期时警告您。
结论
在本教程中,您安装了 Let's Encrypt 客户端 certbot
,为您的域下载 SSL 证书,配置 Nginx 以使用这些证书,并设置自动证书更新。 如果您对使用 Certbot 有其他疑问, 他们的文档 是一个很好的起点。