介绍
Let's Encrypt是一个证书授权机构(CA),它提供了获取和安装免费的 TLS/SSL 证书的方法,从而在 Web 服务器上允许加密 HTTPS。它通过提供软件客户端 Certbot来帮助这个过程,它试图自动化大多数(如果不是所有)所需的步骤。目前,在 Apache 和 Nginx 上获得和安装证书的整个过程都是完全自动化的。
在本教程中,您将使用 Certbot 获取 Debian 11 上 Apache 的免费 SSL 证书,并设置您的证书自动更新。
本教程将使用单独的 Apache 虚拟主机文件而不是默认配置文件。 我们建议为每个域创建新的 Apache 虚拟主机文件,因为它有助于避免常见的错误,并将默认文件作为回归配置。
前提条件
要遵循本教程,您将需要:
- 一个 Debian 11 服务器设置为此 Debian 11 初始服务器设置教程,包括一个非root用户,具有
sudo
权限和防火墙 - 一个完全注册的域名。本教程将使用 your_domain为您的服务器设置为例。您可以在 Namecheap购买域名,在 Freenom获得免费的域名,或使用您选择的域名注册器
- 以下两个 DNS 记录为您的服务器设置。 为了设置这些,您可以遵循 这些添加域名的指示,然后使用 [这些用于创建 DNS 记录的指示](
步骤1:安装Certbot
使用 Let's Encrypt 获得 SSL 证书的第一步是将 Certbot 软件安装到您的服务器上。
<$>[注] **注:本教程遵循(Certbot 文档的建议)(https://certbot.eff.org/docs/install.html#snap)使用 snappy安装该软件在 Debian 上,这是一个为 Linux 系统开发的包管理器,它安装了名为 _snaps_的格式的包。
要在 Debian 上安装 Certbot 作为 snap,您必须先在您的服务器上安装snapd
。snapd
是安装、使用和管理 snap 所需的 DAEMON。
要安装snapd
,如果您最近没有这样做,则更新本地包索引:
1sudo apt update
然后安装Snapd
包:
1sudo apt install snapd
运行此命令后,会出现提示,以确认您想要安装snapd
及其依赖性,您可以按Y
然后按ENTER
来同意。
接下来,使用snap
命令来安装core
snap. 这将在您的服务器上安装一些需要您安装的任何 snap 的依赖性,包括Certbot snap:
1sudo snap install core
然后刷新核心
快照,以确保您安装了snapd
和其依赖的最新版本:
1sudo snap refresh core
请注意,扫描程序可以安装在三个隔离级别中的一个下,这些级别提供不同程度的隔离。例如,大多数扫描程序默认地安装在--严格
隔离级别下,这阻止这些程序访问您的系统文件或网络。由于Certbot必须允许编辑某些配置文件以正确设置证书,此命令包括--经典
选项。
考虑到这一点,您可以使用以下命令安装certbot
快照。
1sudo snap install --classic certbot
此安装过程将安装在 /snap/bin/
目录中可执行的 certbot. 在
/usr/bin/目录中创建一个符号链接到此文件,以确保您可以在系统上任何地方运行
certbot` 命令:
1sudo ln -s /snap/bin/certbot /usr/bin/certbot
Certbot 现在已经准备好使用,但为了为 Apache 配置 SSL,您需要验证 Apache 是否正确配置。
第2步:设置SSL证书
Certbot 需要能够在您的 Apache 配置中找到正确的虚拟主机,以便自动配置 SSL。
如果您遵循了Apache安装教程中的虚拟主机设置步骤(https://andsky.com/tech/tutorials/how-to-install-the-apache-web-server-on-debian-11#step-5-setting-up-virtual-hosts-recommended),则您应该在/etc/apache2/sites-available/your_domain.conf
上为您的域设置一个VirtualHost
区块,并且已经设置了ServerName
指令。
要检查,请使用nano
或您最喜欢的文本编辑器打开您的域的虚拟主机文件:
1sudo nano /etc/apache2/sites-available/your_domain.conf
查找现有的ServerName
行. 它应该如下,使用自己的域名而不是your_domain
:
1[label /etc/apache2/sites-available/your_domain.conf]
2...
3ServerName your_domain;
4...
如果尚未完成,请更新ServerName
指令以指向您的域名,然后保存文件并退出编辑器. 如果您使用了nano
,请按CTRL + X
,Y
,然后按ENTER
。
接下来,检查您的配置编辑的语法:
1sudo apache2ctl configtest
如果没有语法错误,输出将返回如下:
1[secondary_label Output]
2. . .
3Syntax OK
如果您收到错误,请重新打开虚拟主机文件并检查任何字符或缺少的字符。一旦配置文件的语法正确,请重新加载Apache来加载新配置:
1sudo systemctl reload apache2
Certbot 现在可以找到正确的VirtualHost
块并更新它。
接下来,让我们更新防火墙以允许HTTPS流量。
步骤 3 – 通过防火墙允许 HTTPS
如果您已启用了ufw
防火墙,根据前提指南的建议,您将需要调整设置以允许HTTPS流量。
您可以通过运行来验证当前设置:
1sudo ufw status
如果您遵循《如何在Debian 11上安装Apache》指南的第2步,则此命令的输出将如下,表明只有HTTP流量允许到Web服务器:
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6OpenSSH ALLOW Anywhere
7WWW ALLOW Anywhere
8OpenSSH (v6) ALLOW Anywhere (v6)
9WWW (v6) ALLOW Anywhere (v6)
要允许 HTTPS 流量,请允许WWW 完整
配置文件并删除冗余的WWW
配置文件许可:
1sudo ufw allow 'WWW Full'
2sudo ufw delete allow 'WWW'
现在你的状态应该如下:
1sudo ufw status
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6OpenSSH ALLOW Anywhere
7WWW Full ALLOW Anywhere
8OpenSSH (v6) ALLOW Anywhere (v6)
9WWW Full (v6) ALLOW Anywhere (v6)
接下来,让我们运行Certbot并获取我们的证书。
第4步:获取SSL证书
Certbot 提供了通过插件获取 SSL 证书的多种方式. Apache 插件将负责重新配置 Apache 并在必要时重新加载配置。
1sudo certbot --apache -d your_domain -d www.your_domain
这将运行certbot
与--apache
插件,使用-d
来指定您希望证书有效的名称。
如果这是您第一次运行certbot
,您将被要求输入电子邮件地址并同意服务条款。 此外,它还会询问您是否愿意与电子边境基金会(https://www.eff.org/)共享电子邮件地址,这是一家倡导数字权利的非营利组织,也是Certbot的创始人。 请自由输入Y
以分享您的电子邮件地址或N
以拒绝。
这样做后,certbot 会与 Let’s Encrypt 服务器进行通信,然后运行一个挑战,以验证您控制您正在请求证书的域。
如果成功,配置将自动更新,Apache将重新加载以获取新的设置。 certbot
将带上一个消息,告诉您过程成功,您的证书存储在哪里:
1[secondary_label Output]
2Successfully received certificate.
3Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
4Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
5This certificate expires on 2022-10-31.
6These files will be updated when the certificate renews.
7Certbot has set up a scheduled task to automatically renew this certificate in the background.
8
9Deploying certificate
10Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf
11Successfully deployed certificate for www.your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf
12Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain
13
14- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
15If you like Certbot, please consider supporting our work by:
16 * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
17 * Donating to EFF: https://eff.org/donate-le
18- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
您的证书被下载、安装和加载。 尝试使用https://
重新加载您的网站,并注意您的浏览器的安全指标。 它应该表明该网站是正确保护的,通常用绿色锁定图标。 如果您使用 SSL Labs Server Test测试您的服务器,它将获得 A等级。
让我们通过测试更新过程来结束。
步骤 5 – 验证 Certbot 自动更新
Let's Encrypt 证书仅有效 90 天,旨在鼓励用户自动更新证书过程. 您安装的 certbot
包通过将更新脚本添加到 `/etc/cron.d. 此脚本每天运行两次,并且将在到期三十天内自动更新任何证书。
要测试更新过程,您可以使用certbot
进行干跑:
1sudo certbot renew --dry-run
如果你没有收到任何错误,你都已经设置了。当需要时,Certbot将更新你的证书并重新加载Apache来收集更改。如果自动更新过程有时失败,Let’s Encrypt将向你指定的电子邮件发送消息,通知你你的证书即将到期。
结论
在本教程中,您安装了 Let’s Encrypt 客户端certbot
,下载了您的域的 SSL 证书,配置了 Apache 以使用这些证书,并设置了自动证书更新。