如何在 Ubuntu 18.04 上使用 Let's Encrypt 保护 Nginx 安全

0 股票
0
0
0
0

介绍

Let's Encrypt 是一个证书颁发机构 (CA),它提供了一种获取和安装免费 TLS/SSL 证书的方法,从而在 Web 服务器上启用加密的 HTTPS 连接。它通过提供名为 Certbot 的软件客户端简化了这一过程,该客户端力求自动化大部分(如果不是全部)所需步骤。目前,在 Apache 和 Nginx 上获取和安装证书的整个过程已完全自动化。.

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

先决条件
  • 按照 Ubuntu 18.04 的初始服务器设置指南,设置了一台 Ubuntu 18.04 服务器,其中包括一个非 root 的 sudo 用户和一个防火墙。.
  • 一个已完全注册的域名。本教程将全程使用您的域名。您可以在 Namecheap 购买域名,在 Freenom 免费获取域名,或者使用您选择的任何域名注册商。.
  • 以下两条 DNS 记录已为您的服务器设置。有关如何添加它们的更多详细信息,您可以参考 DigitalOcean DNS 的这篇入门指南。.
  • 一条记录,其 your_domain 指向您服务器的公共 IP 地址。.
  • 指向您服务器公共 IP 地址的 www.your_domain 记录。.
  • 按照 Ubuntu 18.04 上安装 Nginx 的教程进行安装。请确保您的域名已配置服务器块。本教程以 `/etc/nginx/sites-available/your_domain` 为例。.

步骤 1 – 安装 Certbot

使用 Let's Encrypt 获取 SSL 证书的第一步是在您的服务器上安装 Certbot 软件。.

Certbot 项目建议大多数用户通过 snap 安装软件,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 行。它应该看起来像这样:

...
server_name your_domain www.your_domain;
...

如果符合条件,请退出编辑器并继续下一步。.

如果不一致,请更新使其匹配。然后保存文件并退出编辑器。如果您使用的是 nano 编辑器,可以按 CTRL + X,然后按 Y 和 ENTER 键退出。.

现在请验证您的配置修改是否正确:

sudo nginx -t

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

sudo systemctl reload nginx

Certbot 现在可以找到正确的服务器块并进行更新。.

接下来,您需要更新防火墙以允许 HTTPS 流量。.

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

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

您可以通过运行以下命令来查看当前设置:

sudo ufw status

你应该会看到类似以下的输出,表明只允许 HTTP 流量访问 Web 服务器:

Output
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 完整的配置文件权限,并移除额外的 Nginx HTTP 权限:

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

现在运行 ufw status 命令时,它将反映这些新规则:

sudo ufw status
Output
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 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 的服务器测试工具测试您的服务器,它将获得 A 级评分。.

现在您已经收到了 SSL 证书,最后一步是测试续订过程。.

步骤 5 – Certbot 自动续期验证

Let's Encrypt 证书的有效期仅为 90 天。这是为了鼓励用户自动续订证书。您安装的 certbot 软件包会通过在 /etc/cron.d 中添加续订脚本来自动完成此操作。该脚本每天运行两次,自动续订任何剩余有效期不足 30 天的证书。.

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

sudo certbot renew --dry-run

如果没有出现错误,一切就绪。如有必要,Certbot 将续订您的证书并重新加载 Nginx 以应用更改。如果自动续订过程失败,Let's Encrypt 将向您指定的邮箱发送邮件,提醒您证书即将过期。.

结果

在本教程中,您已安装了 Let's Encrypt 客户端 Certbot,下载了域名所需的 SSL 证书,配置了 Nginx 以使用这些证书,并设置了证书自动续期。如果您对使用 Certbot 还有其他疑问,可以先查阅他们的文档。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢