如何在 Debian 11 上使用 Let's Encrypt 保护 Apache

介绍

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,您必须先在您的服务器上安装snapdsnapd是安装、使用和管理 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 以使用这些证书,并设置了自动证书更新。

Published At
Categories with 技术
comments powered by Disqus