前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
Let’s Encrypt 是一个证书颁发机构(CA),提供了一种获取和安装免费 TLS/SSL 证书的方式,从而在 Web 服务器上启用加密的 HTTPS。它通过提供一个软件客户端 Certbot 来简化这个过程,该客户端试图自动化大部分(如果不是全部)所需的步骤。目前,在 Apache 和 Nginx 上获取和安装证书的整个过程都是完全自动化的。
在本教程中,您将使用 Certbot 为 Ubuntu 18.04 上的 Apache 获取免费的 SSL 证书,并验证您的证书是否设置为自动续订。
本教程使用单独的 Apache 虚拟主机文件来设置将由 Let’s Encrypt 保护的网站,而不是使用默认的配置文件。我们建议为服务器中托管的每个域创建新的 Apache 虚拟主机文件,因为这有助于避免常见的错误,并将默认文件保留为备用设置。
先决条件
要完成本教程,您需要:
-
通过按照 Ubuntu 18.04 初始服务器设置教程 进行设置的一个 Ubuntu 18.04 服务器,包括一个 sudo 非根用户和一个防火墙。
-
一个完全注册的域名。本教程将在整个过程中使用 your_domain 作为示例。您可以在 Namecheap 购买域名,在 Freenom 免费获取一个,或者使用您选择的域名注册商。
-
为您的服务器设置了以下两个 DNS 记录。您可以参考 DigitalOcean DNS 介绍 中的详细信息来添加它们。
- 一个 A 记录,将
your_domain
指向您服务器的公共 IP 地址。 - 一个 A 记录,将
www.your_domain
指向您服务器的公共 IP 地址。
- 一个 A 记录,将
-
通过按照 如何在 Ubuntu 18.04 上安装 Apache 进行安装的 Apache。确保您为您的域名有一个虚拟主机文件。本教程将使用
/etc/apache2/sites-available/your_domain.conf
作为示例。
步骤 1 — 安装 Certbot
要使用 Let’s Encrypt 获取 SSL 证书,您需要在服务器上安装 Certbot 软件。在本教程中,我们将使用默认的 Ubuntu 软件包存储库来安装 Certbot。
运行以下命令,它将安装两个软件包:certbot
和 python3-certbot-apache
。后者是一个插件,将 Certbot 与 Apache 集成,以便可以使用单个命令自动获取证书并在您的 Web 服务器中配置 HTTPS:
sudo apt install certbot python3-certbot-apache
确认安装,按 Y
然后按 ENTER
接受。
Certbot 现在已安装在您的服务器上。接下来,您将验证 Apache 的配置,以确保您的虚拟主机设置正确。这样可以确保 certbot
客户端脚本能够检测到您的域,并自动重新配置您的 Web 服务器以使用新生成的 SSL 证书。
步骤 2 — 检查您的 Apache 虚拟主机配置
要自动获取和配置您的 Web 服务器的 SSL,Certbot 需要能够在您的 Apache 配置文件中找到正确的虚拟主机。您的服务器域名将从 VirtualHost
配置块中定义的 ServerName
和 ServerAlias
指令中检索。
如果您在 Apache 安装教程中遵循了虚拟主机设置步骤,您应该在 /etc/apache2/sites-available/your_domain.conf
中有一个用于您的域的 VirtualHost 块,并且 ServerName
指令已经适当设置。
要检查,请使用 nano
或您喜欢的文本编辑器打开您域的虚拟主机文件:
sudo nano /etc/apache2/sites-available/your_domain.conf
找到现有的 ServerName
和 ServerAlias
行:
...
ServerName your_domain;
SeverAlias www.your_domain
...
如果您的 ServerName
和 ServerAlias
已经设置好,那么您可以退出文本编辑器并继续下一步。如果您使用的是 nano
,您可以按 CTRL + X
然后按 Y
和 ENTER
来完成。
如果您当前的虚拟主机配置不匹配,那么请相应地进行更新。然后保存并退出文本编辑器。然后,验证您的更改:
sudo apache2ctl configtest
如果您的虚拟主机文件的语法没有任何错误,您将收到 Syntax OK
响应。如果收到错误,请重新打开虚拟主机文件并检查是否有任何拼写错误或缺少字符。一旦您的配置文件的语法正确,重新加载 Apache 以加载新的配置:
sudo systemctl reload apache2
这些更改生效后,Certbot 将能够找到正确的 VirtualHost 块并更新它。
接下来,您将更新防火墙以允许 HTTPS 流量。
第三步 — 允许防火墙通过 HTTPS 流量
如果您已经按照先决条件指南中的建议启用了 UFW 防火墙,您需要调整设置以允许 HTTPS 流量。Apache 注册了一些 UFW 应用程序配置文件,您可以利用 Apache Full 配置文件来允许服务器上的 HTTP 和 HTTPS 流量。
通过运行以下命令来验证当前在服务器上允许的流量类型:
sudo ufw status
如果您遵循了我们的 Apache 安装指南之一,您的输出将生成以下内容,这意味着只允许端口 80
上的 HTTP 流量:
状态:active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)
要额外允许 HTTPS 流量,请允许 Apache Full
配置文件:
sudo ufw allow 'Apache Full'
然后,删除多余的 Apache
配置文件允许:
sudo ufw delete allow 'Apache'
再次检查状态:
sudo ufw status
您应该收到以下输出:
状态:active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache Full (v6) ALLOW Anywhere (v6)
现在,您已经准备好运行 Certbot 并获取您的证书。
第四步 — 获取 SSL 证书
Certbot 提供了多种通过插件获取 SSL 证书的方式。Apache 插件将负责在必要时重新配置 Apache 并重新加载配置。要使用此插件,请运行以下命令:
sudo certbot --apache
此命令将生成一个提示,要求您回答一系列问题以配置您的 SSL 证书。首先,您将被要求提供有效的电子邮件地址,这是用于更新通知和安全通知的:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): you@your_domain
在提供有效的电子邮件地址后,按 ENTER
并继续下一步。您将被要求确认是否同意 Let’s Encrypt 的服务条款。通过按 A
和 ENTER
来确认:
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A
接下来,您将被问及是否愿意与电子前哨基金会共享您的电子邮件地址以接收新闻和其他信息。如果您不想订阅,请按 N
,否则按 Y
然后按 ENTER
继续下一步:
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
提示将告知 Certbot 您要为哪些域名激活 HTTPS。域名列表将自动从您的 Apache 虚拟主机配置中获取。这就是为什么确认您在虚拟主机中配置了正确的 ServerName
和 ServerAlias
设置很重要。如果您想为所有列出的域名启用 HTTPS(推荐),请将提示留空并按 ENTER
继续。否则,通过列出每个适当的数字,用逗号和/或空格分隔,选择要为其启用 HTTPS 的域名:
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - -
## 第五步 — 验证 Certbot 自动续订
Let's Encrypt 证书仅有效期为九十天。这是为了鼓励用户自动化证书续订流程,并确保被滥用的证书或被盗的密钥会尽快过期。
你安装的 `certbot` 软件包通过在 `/etc/cron.d` 中包含一个续订脚本来处理续订,该脚本由一个名为 `certbot.timer` 的 `systemctl` 服务管理。该脚本每天运行两次,并将自动续订任何在到期前三十天内的证书。
检查该服务的状态,并确保它是激活并正在运行的:
```command
sudo systemctl status certbot.timer
你将会收到类似以下的输出:
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: en
Active: active (waiting) since Tue 2021-12-07 20:04:42 UTC; 1h 45min ago
Trigger: Wed 2021-12-08 11:22:45 UTC; 13h left
Dec 07 20:04:42 encrypt systemd[1]: Started Run certbot twice daily.
通过使用 certbot
进行干运行来测试续订流程:
sudo certbot renew --dry-run
如果没有收到错误,那么一切都设置好了。在必要时,Certbot 将会续订你的证书并重新加载 Apache 以应用更改。如果自动续订流程失败,Let’s Encrypt 将会发送一封消息到你指定的邮箱,警告你的证书即将过期。
结论
在本教程中,你安装了 Let’s Encrypt 客户端 certbot
,为你的域配置并安装了 SSL 证书,并确认了 Certbot 的自动证书续订服务在 systemctl
中是激活的。如果你对使用 Certbot 有进一步的问题,他们的文档是一个很好的起点。