如何在 Ubuntu 20.04 上使用 Let‘s Encrypt 保护 Nginx

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

简介

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

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

本教程将使用一个单独的 Nginx 服务器配置文件,而不是默认文件。我们建议为每个域创建新的 Nginx 服务器块文件,因为这有助于避免常见的错误,并将默认文件保留为备用配置。

先决条件

要按照本教程操作,您需要:

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

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

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

    • 一个 A 记录,将 example.com 指向您服务器的公共 IP 地址。
    • 一个 A 记录,将 www.example.com 指向您服务器的公共 IP 地址。
  • 通过按照《在 Ubuntu 20.04 上安装 Nginx》教程安装了 Nginx。确保您为您的域设置了服务器块。本教程将以 /etc/nginx/sites-available/example.com 为例。

步骤 1 — 安装 Certbot

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

使用 apt 安装 Certbot 及其 Nginx 插件:

sudo apt install certbot python3-certbot-nginx

Certbot 现在已准备就绪,但为了让它自动配置 Nginx 的 SSL,我们需要验证一些 Nginx 的配置。

步骤 2 — 确认 Nginx 的配置

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

如果您在 Nginx 安装教程中遵循了服务器块设置步骤,您应该已经在 /etc/nginx/sites-available/example.com 中为您的域设置了一个服务器块,并且 server_name 指令已经适当设置。

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

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

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

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

如果是这样,请退出编辑器,然后继续下一步。

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

sudo nginx -t

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

sudo systemctl reload nginx

Certbot 现在可以找到正确的 server 块并自动更新它。

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

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

如果您已启用了 ufw 防火墙,如先决条件指南中推荐的那样,您需要调整设置以允许 HTTPS 流量。幸运的是,Nginx 在安装时会向 ufw 注册一些配置文件。

您可以通过输入以下命令查看当前设置:

sudo ufw status

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

状态: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'

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

sudo ufw 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 example.com -d www.example.com

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

如果这是您第一次运行 certbot,系统将提示您输入电子邮件地址并同意服务条款。之后,certbot 将与 Let’s Encrypt 服务器通信,然后运行一个挑战来验证您控制您要请求证书的域名。

如果成功,certbot 将询问您如何配置 HTTPS 设置。


请选择是否将 HTTP 流量重定向到 HTTPS,删除 HTTP 访问。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: 不重定向 - 不对 web 服务器配置进行进一步更改。
2: 重定向 - 使所有请求重定向到安全的 HTTPS 访问。对于新站点或者您确信您的站点可以使用 HTTPS,请选择此项。您可以通过编辑您的 web 服务器配置来撤消此更改。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
选择适当的数字 [1-2] 然后按 [enter] 键(按 'c' 取消):

选择您的选择然后按 ENTER 键。配置将被更新,Nginx 将重新加载以应用新的设置。certbot 将以一条消息告诉您过程成功,并告诉您证书存储在何处:


重要提示:
 - 恭喜!您的证书和链已保存在:
   /etc/letsencrypt/live/example.com/fullchain.pem
   您的密钥文件已保存在:
   /etc/letsencrypt/live/example.com/privkey.pem
   您的证书将在 2020-08-18 到期。在将来获取新的或调整过的
   版本的此证书时,只需再次运行 certbot
   使用 "certonly" 选项。要非交互式地更新 *所有*
   您的证书,请运行 "certbot renew"
 - 如果您喜欢 Certbot,请考虑通过以下方式支持我们的工作:

   向 ISRG / Let's Encrypt 捐赠:   https://letsencrypt.org/donate
   向 EFF 捐赠:                    https://eff.org/donate-le

您的证书已下载、安装和加载。尝试使用 https:// 重新加载您的网站,并注意您浏览器的安全指示器。它应该指示网站已正确安全,通常会显示一个锁图标。如果您使用 SSL Labs 服务器测试测试您的服务器,它将获得一个 A 等级。

让我们通过测试续订过程来结束。

步骤 5 — 验证 Certbot 自动续订

Let’s Encrypt 的证书只在九十天内有效。这是为了鼓励用户自动化他们的证书续订过程。我们安装的 certbot 软件包通过添加一个 systemd 定时器来为我们处理这个问题,该定时器将每天运行两次,并自动续订任何在到期前三十天内的证书。

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

sudo systemctl status certbot.timer

● certbot.timer - 每天运行 certbot 两次
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
    Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
   Triggers: ● certbot.service

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

sudo certbot renew --dry-run

如果没有错误,您已经设置好了。在必要时,Certbot 将续订您的证书并重新加载 Nginx 以应用更改。如果自动续订过程失败,Let’s Encrypt 将向您指定的电子邮件发送一封消息,警告您您的证书即将到期。

结论

在本教程中,您安装了 Let’s Encrypt 客户端 certbot,为您的域下载了 SSL 证书,配置了 Nginx 来使用这些证书,并设置了自动证书续订。如果您对使用 Certbot 有进一步的问题,官方文档是一个很好的起点。

猜你喜欢

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