介绍

Let's Encrypt 是一个证书颁发机构 (CA),它提供了一种获取和安装免费 TLS/SSL 证书 的便捷方式certificate-private-keys-and-csrs),从而在 Web 服务器上启用加密的 HTTPS。它通过提供软件客户端 Certbot 来简化流程,该客户端尝试自动化大部分(如果不是全部)所需步骤。目前,获取和安装证书的整个过程在 Apache 和 Nginx 上都是完全自动化的。

在本教程中,您将使用 Certbot 在 Ubuntu 22.04 上为 Nginx 获取免费的 SSL 证书,并将您的证书设置为自动更新。

本教程将使用单独的 Nginx 服务器配置文件而不是默认文件。 [我们推荐](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-22-04#step-5-%E2%80%93-setting-up- server-blocks-(推荐))为每个域创建新的 Nginx 服务器块文件,因为它有助于避免常见错误并将默认文件维护为备用配置。

先决条件

要遵循本教程,您将需要:

  • 按照此Ubuntu 22.04 的初始服务器设置 教程设置一台 Ubuntu 22.04 服务器,包括启用 sudo 的非 root 用户和防火墙。

  • 一个注册的域名。本教程将始终使用 example.com。您可以从 Namecheap 购买域名,通过 Freenom 免费获得一个,或使用您选择的域名注册商。

  • 为您的服务器设置了以下两个 DNS 记录。如果您使用的是 DigitalOcean,请参阅我们的 DNS 文档 了解如何添加它们的详细信息。

  • 带有 example.com 的 A 记录指向您服务器的公共 IP 地址。

  • 带有 www.example.com 的 A 记录指向您服务器的公共 IP 地址。

  • 按照如何在 Ubuntu 22.04 上安装 Nginx 安装 Nginx。确保您有 [服务器块](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-22-04#step-5-%E2%80% 93-setting-up-server-blocks-(推荐))为您的域。本教程将使用 /etc/nginx/sites-available/example.com 作为示例。

步骤 1 — 安装 Certbot

Certbot 建议使用他们的 snap 包进行安装。 Snap 包几乎适用于所有 Linux 发行版,但它们要求您先安装 snapd 才能管理 snap 包。 Ubuntu 22.04 支持开箱即用的 snap,因此您可以首先确保您的 snapd 核心是最新的:

sudo snap install 核心; sudo snap 刷新核心

如果您在以前安装了旧版本 certbot 的服务器上工作,则应在继续之前将其删除:

sudo apt remove certbot

之后,您可以安装 certbot 包:

sudo snap install --classic certbot

最后,您可以将 snap 安装目录中的“certbot”命令链接到您的路径,这样您只需输入“certbot”即可运行它。并非所有软件包都需要这样做,但默认情况下,快照的侵入性往往较小,因此它们不会意外与任何其他系统软件包发生冲突:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

现在我们已经安装了 Certbot,让我们运行它来获取我们的证书。

步骤 2 — 确认 Nginx 的配置

Certbot 需要能够在您的 Nginx 配置中找到正确的“服务器”块,以便能够自动配置 SSL。具体来说,它通过查找与您请求证书的域匹配的“server_name”指令来做到这一点。

如果按照【Nginx安装教程中的服务器块设置步骤】(https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-22-04#step-5 -%E2%80%93-setting-up-server-blocks-(推荐)),你应该在 /etc/nginx/sites-available/example.com 有一个带有 server_name 的域的服务器块指令已经适当设置。

要检查,请使用 nano 或您喜欢的文本编辑器打开您的域的配置文件:

Sudonano / Etc / Ngin x / Shite s - ah ia b e / ah mp e。这个米

找到现有的 server_name 行。它应该如下所示:

/etc/nginx/sites-available/example.com

...
server_name example.com www.example.com;
...

如果是,请退出编辑器并继续下一步。

如果没有,请更新它以匹配。然后保存文件,退出编辑器,并验证配置编辑的语法:

须藤 nginx -t

如果出现错误,请重新打开服务器块文件并检查是否有任何拼写错误或缺少字符。配置文件语法正确后,重新加载 Nginx 以加载新配置:

sudo systemctl 重新加载 nginx

Certbot 现在可以找到正确的“服务器”块并自动更新它。

接下来,让我们更新防火墙以允许 HTTPS 流量。

步骤 3 — 允许 HTTPS 通过防火墙

如果按照先决条件指南的建议启用了“ufw”防火墙,则需要调整设置以允许 HTTPS 流量。幸运的是,Nginx 在安装时使用 ufw 注册了一些配置文件。

您可以通过键入以下内容查看当前设置:

须藤 ufw 状态

它可能看起来像这样,这意味着只允许 HTTP 流量进入 Web 服务器:

输出状态:活动

采取行动
-- ------ ----
OpenSSH 允许任何地方
Nginx HTTP 允许任何地方
OpenSSH (v6) 允许在任何地方 (v6)
Nginx HTTP (v6) 允许在任何地方 (v6)

要额外允许 HTTPS 流量,请允许 Nginx Full 配置文件并删除多余的 Nginx HTTP 配置文件允许:

sudo ufw 允许'Nginx Full'
sudo ufw delete 允许'Nginx HTTP'

您的状态现在应该如下所示:

须藤 ufw 状态

输出状态:活动

采取行动
-- ------ ----
OpenSSH 允许任何地方
Nginx Full 允许任何地方
OpenSSH (v6) 允许在任何地方 (v6)
Nginx Full (v6) 允许任何地方 (v6)

接下来,让我们运行 Certbot 并获取我们的证书。

第 4 步 — 获取 SSL 证书

Certbot 提供了多种通过插件获取 SSL 证书的方式。 Nginx 插件将负责重新配置 Nginx 并在必要时重新加载配置。要使用此插件,请键入以下内容:

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

这将使用 --nginx 插件运行 certbot,使用 -d 指定我们希望证书有效的域名。

运行命令时,系统会提示您输入电子邮件地址并同意服务条款。完成此操作后,您应该会看到一条消息,告诉您该过程已成功以及您的证书存储在哪里:

输出重要说明:
顺利拿到证书。
证书保存在:/etc/letsencrypt/live/your_domain/fullchain.pem
密钥保存在:/etc/letsencrypt/live/your_domain/privkey.pem
此证书将于 2022 年 6 月 1 日到期。
这些文件将在证书更新时更新。
Certbot 已设置计划任务在后台自动更新此证书。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
如果您喜欢 Certbot,请考虑通过以下方式支持我们的工作:
* 捐赠给 ISRG / Let's Encrypt:https://letsencrypt.org/donate
* 向 EFF 捐款:https://eff.org/donate-le

您的证书已下载、安装和加载,您的 Nginx 配置现在将自动将所有 Web 请求重定向到“https://”。尝试重新加载您的网站并注意浏览器的安全指示器。它应该表明该站点得到了适当的保护,通常带有一个锁定图标。如果您使用 SSL Labs Server Test 测试您的服务器,它将获得 A 成绩。

让我们通过测试更新过程来结束。

第 5 步 — 验证 Certbot 自动续订

Let's Encrypt 的证书有效期只有九十天。这是为了鼓励用户自动化他们的证书更新过程。我们安装的“certbot”包通过添加一个每天运行两次的 systemd 计时器来为我们解决这个问题,并自动更新到期后 30 天内的任何证书。

您可以使用 systemctl 查询计时器的状态:

sudo systemctl status snap.certbot.renew.service

输出○ snap.certbot.renew.service - snap 应用程序 certbot.renew 的服务
已加载:已加载(/etc/systemd/system/snap.certbot.renew.service;静态)
活跃:不活跃(死)
触发者: ● snap.certbot.renew.timer

要测试续订过程,您可以使用 certbot 进行试运行:

sudo certbot renew --dry-run

如果您没有看到任何错误,则一切就绪。必要时,Certbot 将更新您的证书并重新加载 Nginx 以获取更改。如果自动续订过程失败,Let's Encrypt 将向您指定的电子邮件发送一条消息,在您的证书即将到期时警告您。

结论

在本教程中,您安装了 Let's Encrypt 客户端“certbot”,为您的域下载 SSL 证书,配置 Nginx 以使用这些证书,并设置自动证书更新。如果您对使用 Certbot 有其他疑问,官方文档 是一个很好的起点。

Logo

更多推荐