前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
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 地址。
- 一个 A 记录,将
-
通过按照《在 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 有进一步的问题,官方文档是一个很好的起点。