如何在Debian 11上使用Let’s Encrypt保护Apache
引言
受信任的证书颁发机构(CA)— Let’s Encrypt,提供了一种免费获取和安装TLS/SSL证书的方式,从而使Web服务器能够启用加密的HTTPS。它通过提供软件客户端Certbot来协助这个过程,尝试自动化大部分(如果不是全部)必要的步骤。目前,获得和安装证书的整个过程在Apache和Nginx上都是全自动化的。
在本教程中,您将使用 Certbot 为 Debian 11 上的 Apache 获取免费的 SSL 证书,并设置证书自动续期。
本教程将使用单独的Apache虚拟主机文件,而不是默认的配置文件。我们建议为每个域名创建新的Apache虚拟主机文件,因为这有助于避免常见错误,并将默认文件保留为备用配置。
先决条件
要按照本教程进行操作,你需要:
- One Debian 11 server set up by following this initial server setup for Debian 11 tutorial, including a non-root user with sudo privileges and a firewall.
- A fully registered domain name. This tutorial will use your_domain as an example throughout. You can purchase a domain name on Namecheap, get one for free on Freenom, or use the domain registrar of your choice.
- Both of the following DNS records set up for your server. To set these up, you can follow these instructions for adding domains and then these instructions for creating DNS records.An A record with your_domain pointing to your server’s public IP address.
An A record with www.your_domain pointing to your server’s public IP address. - Apache installed by following How To Install Apache on Debian 11. Be sure that you have a virtual host file set up for your domain. This tutorial will use /etc/apache2/sites-available/your_domain.conf as an example.
步骤1 – 安装Certbot
使用Let’s Encrypt获取SSL证书的第一步是在您的服务器上安装Certbot软件。
Note
在Debian上将Certbot安装为snap包,首先需要在服务器上安装snapd。snapd是一个必需的后台程序,用于安装、使用和管理snap包。安装snapd软件包还会在您的服务器上安装snap命令。
要安装snapd,如果您最近还没有更新本地软件包索引,请先更新它。
- sudo apt update
然后安装snapd软件包。
- sudo apt install snapd
运行此命令后,将会出现一个提示来确认是否要安装snapd以及它的依赖项。你可以通过按下Y键然后按下回车键来同意安装。
接下来,使用snap命令安装核心snap。这将在您的服务器上安装一些依赖项,这些依赖项对您安装的任何snap都是必需的,包括Certbot snap。
- sudo snap install core
然后刷新核心快照。这样做将确保您安装了最新版本的snapd及其依赖项。
- sudo snap refresh core
请注意,Snaps 可以在三种约束级别之一下进行安装,这些级别提供了不同程度的与系统隔离。例如,默认情况下,大多数 Snaps 是在–strict 约束级别下安装的,这会阻止这些程序访问您系统的文件或网络。由于 Certbot 必须被允许编辑某些配置文件以正确设置证书,所以这个命令包括了–classic选项。这个约束级别允许任何在其下安装的 Snaps 与传统软件包一样访问系统资源。
考虑到这一点,您可以使用以下命令安装certbot snap。
- sudo snap install –classic certbot
安装过程将会在/snap/bin/目录中安装certbot可执行文件。在/usr/bin/目录中创建一个符号链接以确保您可以在系统的任何位置运行certbot命令。
- sudo ln -s /snap/bin/certbot /usr/bin/certbot
Certbot现在可以使用了,但为了让它为Apache配置SSL,您需要核实Apache已正确配置。
步骤2 — 设置SSL证书
为了让Certbot能够自动配置SSL,它需要在您的Apache配置中找到正确的虚拟主机。具体而言,通过搜索与您请求证书的域名相匹配的ServerName指令来实现此功能。
如果你按照Apache安装教程中的虚拟主机设置步骤操作,你的域名应该在/etc/apache2/sites-available/your_domain.conf处有一个VirtualHost块,并且ServerName指令已经适当地设置好了。
要检查,请使用nano或您喜欢的文本编辑器打开您域名的虚拟主机文件。
- sudo nano /etc/apache2/sites-available/your_domain.conf
找到现有的ServerName行。它应该像下面这样,你需要用你自己的域名来替代your_domain。
...
ServerName your_domain;
...
如果还没有的话,更新ServerName指令以指向您的域名。然后保存文件并退出您的编辑器。如果您使用的是nano,按下CTRL + X,Y,然后按ENTER来完成操作。
接下来,验证您所做的配置编辑的语法是否正确。
- sudo apache2ctl configtest
如果没有语法错误,你的输出将返回以下结果:
. . . Syntax OK
如果出现错误,请重新打开虚拟主机文件并检查是否有拼写错误或缺少字符。一旦配置文件的语法正确,重新加载Apache以加载新的配置文件。
- sudo systemctl reload apache2
Certbot现在可以找到正确的VirtualHost块并更新它。
接下来,让我们更新防火墙以允许HTTPS流量通过。
步骤三 — 允许防火墙通过HTTPS进入
如果您已经按照先决指南的建议启用了ufw防火墙,您需要调整设置以允许HTTPS流量。幸运的是,当在Debian上安装了ufw时,它附带了几个配置文件,可以帮助您更改防火墙规则以适应HTTP和HTTPS流量。
您可以通过运行来验证当前设置。
- sudo ufw status
如果您按照我们在如何在Debian 11上安装Apache的指南中的第二步操作,这个命令的输出将如下所示,表示只允许HTTP流量访问Web服务器。
Status: active To Action From — —— —- OpenSSH ALLOW Anywhere WWW ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) WWW (v6) ALLOW Anywhere (v6)
为了允许HTTPS流量,需要允许“WWW Full”配置文件并删除冗余的“WWW”配置文件。
- sudo ufw allow ‘WWW Full’
- sudo ufw delete allow ‘WWW’
您的状态现在应该是以下情况:
- sudo ufw status
Status: active To Action From — —— —- OpenSSH ALLOW Anywhere WWW Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) WWW Full (v6) ALLOW Anywhere (v6)
接下来,我们来运行Certbot并获取我们的证书。
步骤4 — 获取SSL证书
Certbot通过插件提供了多种方式来获取SSL证书。Apache插件将负责在必要时重新配置Apache并重新加载配置。要使用此插件,请运行以下命令:
- sudo certbot –apache -d your_domain -d www.your_domain
这个命令在certbot上使用–apache插件,并使用-d参数来指定您希望证书有效的名称。
如果这是您第一次运行Certbot,系统会提示您输入电子邮件地址并同意服务条款。此外,系统还会询问您是否愿意与电子前哨基金会共享您的电子邮件地址,该基金会是一个倡导数字权利的非营利组织,也是Certbot的开发者。请随意选择输入Y共享您的电子邮件地址或N拒绝。
在这样做之后,Certbot将与Let’s Encrypt服务器进行通信,然后运行一个挑战来验证您控制正在请求证书的域名。
如果成功的话,配置将会自动更新,Apache会重新加载以获取新的设置。Certbot会以一条消息告诉你进程已成功并指出证书的存储位置。
Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-10-31. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf Successfully deployed certificate for www.your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
您的证书已下载、安装和加载。尝试使用https://重新加载您的网站,并注意您浏览器的安全指示器。通常情况下,它应显示该网站已正确加密,并带有一个绿色锁定图标。如果使用SSL Labs服务器测试来测试您的服务器,它将获得A级评分。
让我们通过测试续订流程来结束吧。
第五步-验证Certbot自动续订
让我们加密的证书只有九十天的有效期。这是为了鼓励用户自动化他们的证书更新流程。您安装的certbot软件包会通过在/etc/cron.d中添加一个更新脚本来为您处理这个问题。这个脚本每天运行两次,会自动更新任何距过期还有三十天的证书。
为了测试续订过程,您可以使用certbot进行干运行。
- sudo certbot renew –dry-run
如果你没有收到任何错误,那么一切都准备就绪了。在必要时,Certbot将会更新你的证书并重新加载Apache以应用这些变化。如果自动续订过程失败,Let’s Encrypt将会发送邮件到你指定的邮箱,并在你的证书即将到期时提醒你。
结论
在这个教程中,你安装了Let’s Encrypt客户端certbot,为你的域名下载了SSL证书,配置了Apache来使用这些证书,并设置了自动更新证书。如果你对使用Certbot有进一步的问题,它们的文档是一个很好的起点。