如何在 Ubuntu 18.04 上使用 Let‘s Encrypt 保护 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 非根用户和防火墙。

  • 一个完全注册的域名。本教程将始终使用 your_domain。您可以在 Namecheap 购买域名,在 Freenom 免费获取域名,或者使用您选择的域名注册商。

  • 为您的服务器设置了以下两个 DNS 记录。您可以参考 DigitalOcean DNS 介绍中的详细信息来添加它们。

    • 一个 A 记录,将 your_domain 指向您服务器的公共 IP 地址。
    • 一个 A 记录,将 www.your_domain 指向您服务器的公共 IP 地址。
  • 通过按照《在 Ubuntu 18.04 上安装 Nginx》进行安装的 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 的当前版本和成功安装:



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 然后 YENTER 来完成此操作。

现在验证您的配置编辑的语法:

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'

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

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 your_domain -d your_domain

这将使用 --nginx 插件运行 certbot,并使用 -d 来指定证书应为有效的名称。

如果这是您第一次运行 certbot,系统将提示您输入电子邮件地址并同意服务条款。之后,certbot 将与 Let’s Encrypt 服务器通信,为您的域请求证书。如果成功,您将收到以下输出:

成功接收到证书。
证书保存在:/etc/letsencrypt/live/your_domain/fullchain.pem
密钥保存在:/etc/letsencrypt/live/your_domain/privkey.pem
此证书将于 2022-01-27 到期。
这些文件将在证书更新时更新。
Certbot 已设置了后台自动更新此证书的定时任务。

部署证书
已成功将证书部署到 /etc/nginx/sites-enabled/your_domain
已成功将证书部署到 /etc/nginx/sites-enabled/your_domain
恭喜!您已成功在 https://your_domain 和 https://www.your_domain 上启用了 HTTPS

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

您的证书已下载、安装和加载。尝试使用 https:// 重新加载您的网站,并注意您的浏览器安全指示器。它应指示网站已正确安全,通常会显示一个绿色的锁图标。如果使用 SSL Labs 服务器测试测试您的服务器,它将获得 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 有进一步的问题,他们的文档是一个很好的起点。

猜你喜欢

转载自blog.csdn.net/rubys007/article/details/143277257