如何在 Ubuntu 22.04 上使用 Let's Encrypt 加密 Nginx

介绍

Let's Encrypt 是一个证书授权机构(CA),它提供了一个可访问的方式来获取和安装免费的 TLS/SSL 证书,从而在 Web 服务器上允许加密 HTTPS。它通过提供一个软件客户端,Certbot,它试图自动化大多数(如果不是所有)所需的步骤来简化这个过程。

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

本教程将使用单独的 Nginx 服务器配置文件,而不是默认文件。 我们建议为每个域创建新的 Nginx 服务器封锁文件,因为它有助于避免常见的错误,并将默认文件作为回归配置。

前提条件

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

一个Ubuntu 22.04 服务器设置通过以下 初始服务器设置为 Ubuntu 22.04 教程,包括一个 sudo-enabled non-root用户和防火墙。

  • 注册域名. 本教程将使用 example.com 整个。您可以从 Namecheap购买域名,获得一个免费的 Freenom,或使用您选择的域名注册器。
  • 以下两个 DNS 记录为您的服务器设置。 如果您正在使用 DigitalOcean,请参阅我们的 DNS 文档 有关如何添加它们的详细信息。
  • 一个记录与 example.com 指向您的

步骤1:安装Certbot

Certbot 建議使用其 snap 套件進行安裝. Snap 套件在幾乎所有 Linux 發行版上都工作,但他們要求您先安裝 snapd 以管理 snap 套件。

1sudo snap install core; sudo snap refresh core

如果您在之前安装了较旧版本的 certbot 的服务器上工作,您应该在继续之前移除它:

1sudo apt remove certbot

之后,您可以安装certbot包:

1sudo snap install --classic certbot

最后,您可以将certbot命令从即时安装目录链接到您的路径,因此您将能够通过键入certbot来运行它。

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

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

步骤 2 — 确认 Nginx 的配置

Certbot 需要能够在您的 Nginx 配置中找到正确的服务器块,以便能够自动配置 SSL。

如果您遵循了 Nginx 安装教程中的 [服务器块设置步骤](https://andsky.com/tech/tutorials/how-to-install-nginx-on-ubuntu-22-04#step-5-%E2%80%93-setting-up-server-blocks-(recommended),则您应该在 /etc/nginx/sites-available/example.com’ 对您的域名设有服务器块,并且已设置适当的 server_name` 指令。

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

1sudo nano /etc/nginx/sites-available/example.com

查找现有的server_name行,它应该是这样的:

1[label /etc/nginx/sites-available/example.com]
2...
3server_name example.com www.example.com;
4...

如果是,请退出编辑器并转到下一步。

如果不是,则更新以匹配,然后保存文件,离开编辑器,并验证配置编辑的语法:

1sudo nginx -t

如果您收到错误,请重新打开服务器封锁文件并检查任何字符或缺少的字符。一旦配置文件的语法是正确的,重新加载 Nginx 来加载新的配置:

1sudo systemctl reload nginx

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

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

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

如果您已启用ufw防火墙,根据前提指南的建议,您将需要调整设置以允许HTTPS流量。

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

1sudo ufw status

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

1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere                  
7Nginx HTTP ALLOW Anywhere                  
8OpenSSH (v6)               ALLOW Anywhere (v6)             
9Nginx HTTP (v6)            ALLOW Anywhere (v6)

要进一步允许 HTTPS 流量,请允许 Nginx 完整配置文件并删除多余的 Nginx HTTP 配置文件允许:

1sudo ufw allow 'Nginx Full'
2sudo ufw delete allow 'Nginx HTTP'

你的状态现在应该是这样的:

1sudo ufw status
1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere
7Nginx Full ALLOW Anywhere
8OpenSSH (v6)               ALLOW Anywhere (v6)
9Nginx Full (v6)            ALLOW Anywhere (v6)

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

第4步:获取SSL证书

Certbot 提供了通过插件获取 SSL 证书的多种方式。 Nginx 插件将负责重新配置 Nginx 并在必要时重新加载配置。

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

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

在运行命令时,您将被要求输入电子邮件地址并同意服务条款. 这样做后,您应该看到一个消息,告诉您过程成功,您的证书存储在哪里:

 1[secondary_label Output]
 2IMPORTANT NOTES:
 3Successfully received certificate.
 4Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
 5Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
 6This certificate expires on 2022-06-01.
 7These files will be updated when the certificate renews.
 8Certbot has set up a scheduled task to automatically renew this certificate in the background.
 9
10- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
11If you like Certbot, please consider supporting our work by:
12* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
13* Donating to EFF: https://eff.org/donate-le

您的证书已下载、安装和加载,您的 Nginx 配置现在将自动重定向所有网页请求到 https://. 尝试重新加载您的网站并注意您的浏览器的安全指标。 它应该表明该网站是正确保护的,通常用锁定图标。 如果您使用 SSL Labs Server Test测试您的服务器,它将获得 A级别。

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

步骤 5 – 验证 Certbot 自动更新

Let’s Encrypt 的证书仅有效 90 天,这是为了鼓励用户自动更新证书的过程,我们安装的certbot包通过添加一个 systemd 计时器来为我们提供此功能,该计时器每天运行两次,并在到期三十天内自动更新任何证书。

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

1sudo systemctl status snap.certbot.renew.service
1[secondary_label Output]
2 snap.certbot.renew.service - Service for snap application certbot.renew
3     Loaded: loaded (/etc/systemd/system/snap.certbot.renew.service; static)
4     Active: inactive (dead)
5TriggeredBy:  snap.certbot.renew.timer

要测试更新过程,您可以使用certbot进行干跑:

1sudo certbot renew --dry-run

如果你看不到任何错误,你都已经设置了。当需要时,Certbot会更新你的证书并重新加载 Nginx 来接收更改。如果自动更新过程有时失败,Let’s Encrypt 会向你指定的电子邮件发送消息,提醒你你的证书即将到期。

结论

在本教程中,您安装了 Let’s Encrypt 客户端certbot,下载了您的域的 SSL 证书,配置了 Nginx 以使用这些证书,并设置了自动证书更新。

Published At
Categories with 技术
comments powered by Disqus