前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
Let’s Encrypt 是一个证书颁发机构(CA),它简化了获取和安装免费 TLS/SSL 证书的过程,从而在 Web 服务器上启用了加密的 HTTPS。它通过提供一个软件客户端 Certbot 来简化这个过程,该客户端试图自动化大部分(如果不是全部)所需的步骤。目前,在 Apache 和 Nginx 上,获取和安装证书的整个过程都是完全自动化的。
在本指南中,我们将使用 Certbot 在 Ubuntu 20.04 上为 Apache 获取免费的 SSL 证书,并确保该证书设置为自动续订。
本教程使用单独的虚拟主机文件来设置将由 Let’s Encrypt 保护的网站,而不是使用 Apache 的默认配置文件。我们建议为服务器中托管的每个域创建新的 Apache 虚拟主机文件,因为这有助于避免常见错误,并将默认配置文件保持为备用设置。
先决条件
要按照本教程操作,您需要:
-
通过按照 Ubuntu 20.04 初始服务器设置教程 设置好的一个 Ubuntu 20.04 服务器,包括一个 sudo 非根用户和一个防火墙。
-
一个完全注册的域名。本教程将在整个过程中使用 your_domain 作为示例。您可以在 Namecheap 购买一个域名,在 Freenom 免费获取一个域名,或者使用您选择的域名注册商。
-
为您的服务器设置好以下两个 DNS 记录。您可以参考 DigitalOcean DNS 介绍中的详细信息来添加它们。
- 一个 A 记录,将
your_domain
指向您服务器的公共 IP 地址。 - 一个 A 记录,将
www.your_domain
指向您服务器的公共 IP 地址。
- 一个 A 记录,将
-
通过按照《在 Ubuntu 20.04 上安装 Apache》教程安装了 Apache。确保您为您的域名有一个虚拟主机文件。本教程将使用
/etc/apache2/sites-available/your_domain.conf
作为示例。
步骤 1 — 安装 Certbot
为了使用 Let’s Encrypt 获取 SSL 证书,我们首先需要在您的服务器上安装 Certbot 软件。我们将使用默认的 Ubuntu 软件包存储库来进行安装。
我们需要两个软件包:certbot
和 python3-certbot-apache
。后者是一个插件,它将 Certbot 与 Apache 集成在一起,使得可以使用单个命令自动获取证书并在您的 Web 服务器中配置 HTTPS。
sudo apt install certbot python3-certbot-apache
您将被提示通过按 Y
,然后按 ENTER
来确认安装。
现在 Certbot 已经安装在您的服务器上。在下一步中,我们将验证 Apache 的配置,以确保您的虚拟主机设置适当。这将确保 certbot
客户端脚本能够检测到您的域,并自动重新配置您的 Web 服务器以使用您新生成的 SSL 证书。
步骤 2 — 检查您的 Apache 虚拟主机配置
为了能够自动获取和配置 SSL 证书,Certbot 需要在您的 Apache 配置文件中找到正确的虚拟主机。您服务器的域名将从 VirtualHost
配置块中定义的 ServerName
和 ServerAlias
指令中检索。
如果您在 Apache 安装教程中遵循了虚拟主机设置步骤,您应该已经在 /etc/apache2/sites-available/your_domain.conf
中为您的域设置了一个 VirtualHost 块,并且 ServerName
和 ServerAlias
指令已经适当设置。
要检查这一点,使用 nano
或您喜欢的文本编辑器打开您域的虚拟主机文件:
sudo nano /etc/apache2/sites-available/your_domain.conf
找到现有的 ServerName
和 ServerAlias
行。它们应该如下所示:
...
ServerName your_domain
ServerAlias www.your_domain
...
如果您已经像这样设置了您的 ServerName
和 ServerAlias
,您可以退出文本编辑器并继续下一步。如果您使用的是 nano
,您可以通过输入 CTRL+X
,然后输入 Y
和 ENTER
来退出。
如果您当前的虚拟主机配置与示例不匹配,请相应地进行更新。完成后,保存文件并退出编辑器。然后,运行以下命令来验证您的更改:
sudo apache2ctl configtest
您应该会得到 Syntax OK
作为响应。如果出现错误,请重新打开虚拟主机文件并检查是否有任何拼写错误或缺少字符。一旦您的配置文件语法正确,重新加载 Apache 以使更改生效:
sudo systemctl reload apache2
通过这些更改,Certbot 将能够找到正确的 VirtualHost 块并对其进行更新。
接下来,我们将更新防火墙以允许 HTTPS 流量。
步骤 3 —— 允许防火墙通过 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” 配置文件并删除多余的 “Apache” 配置文件:
sudo ufw allow 'Apache Full'
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 并获取你的证书。
步骤 4 —— 获取 SSL 证书
Certbot 提供了多种通过插件获取 SSL 证书的方式。Apache 插件将负责在必要时重新配置 Apache 并重新加载配置。要使用此插件,请输入以下命令:
sudo certbot --apache
此脚本将提示你回答一系列问题,以配置你的 SSL 证书。首先,它将要求你提供一个有效的电子邮件地址。此电子邮件将用于更新通知和安全通知:
将调试日志保存到 /var/log/letsencrypt/letsencrypt.log
已选择的插件:Authenticator apache,Installer apache
输入电子邮件地址(用于紧急更新和安全通知)(输入 'c' 取消):you@your_domain
提供有效的电子邮件地址后,按 ENTER
继续下一步。然后,你将被提示确认是否同意 Let’s Encrypt 的服务条款。你可以通过按 A
然后 ENTER
来确认:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
请阅读 https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf 上的服务条款。你必须同意才能在 https://acme-v02.api.letsencrypt.org/directory 上注册 ACME 服务器
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel:A
接下来,你将被问及是否愿意与 Electronic Frontier Foundation 分享你的电子邮件地址以接收新闻和其他信息。如果你不想订阅他们的内容,输入 N
。否则,输入 Y
。然后,按 ENTER
继续下一步。
- - - - - - - - - - - - - - - - - - - - - - - - - - -
## 第五步 — 验证 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: enabled)
Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago
Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left
Triggers: ● certbot.service
Apr 28 17:57:48 fine-turtle 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 有进一步的问题,他们的文档是一个很好的起点。