介绍
Let's Encrypt是一项通过自动化 API 提供免费 SSL 证书的服务。最流行的 Let's Encrypt 客户端是EFF的Certbot。
Certbot 提供了多种方法来验证您的域、获取证书以及自动配置 Apache 和 Nginx。在本教程中,我们将讨论 Certbot 的独立模式以及如何使用它来保护其他类型的服务,例如邮件服务器或 RabbitMQ 等消息代理。
我们不会讨论 SSL 配置的详细信息,但完成后您将拥有一个自动续订的有效证书。此外,您将能够自动重新加载服务以获取更新的证书。
先决条件
在开始本教程之前,您将需要:
具有非 root、启用 sudo 的用户的 CentOS 7 服务器,如CentOS 7 初始服务器设置教程中详细介绍。
指向您服务器的域名,您可以按照“如何使用 DigitalOcean 设置主机名”来完成。本教程将贯穿example.com始终。
您的服务器上必须未使用端口 80或443。如果您尝试保护的服务位于具有占用这两个端口的 Web 服务器的计算机上,则您需要使用不同的模式,例如 Certbot 的webroot模式。
第 1 步 — 安装 Certbot
Certbot 打包在一个名为Extra Packages for Enterprise Linux (EPEL) 的额外存储库中。要在 CentOS 7 上启用此存储库,请运行以下yum命令:
sudo yum --enablerepo=extras install epel-release
之后,certbot可以使用以下命令安装该软件包yum:
sudo yum install certbot
您可以通过调用以下命令来确认安装是否成功certbot:
certbot --version
Output
certbot 0.31.0
现在我们已经安装了 Certbot,让我们运行它来获取我们的证书。
第 2 步 — 运行 Certbot
Certbot 需要回答 Let's Encrypt API 发出的加密挑战,以证明我们控制我们的域。它使用端口80(HTTP) 或443(HTTPS) 来完成此操作。如果您使用防火墙,请立即打开适当的端口。因为firewalld这将类似于以下内容:
sudo firewall-cmd --add-service=http
sudo firewall-cmd --runtime-to-permanent
如果您使用端口 443,请替换上面的https内容。http
我们现在可以运行 Certbot 来获取我们的证书。我们将使用该--standalone选项告诉 Certbot 使用其自己的内置 Web 服务器来处理挑战。该--preferred-challenges选项指示 Certbot 使用端口 80 或端口 443。如果您使用端口 80,则需要--preferred-challenges http.对于端口 443 来说是--preferred-challenges tls-sni.最后,该-d标志用于指定您为其请求证书的域。您可以添加多个-d选项以涵盖一张证书中的多个域。
sudo certbot certonly --standalone --preferred-challenges http -d example.com
运行该命令时,系统将提示您输入电子邮件地址并同意服务条款。执行此操作后,您应该会看到一条消息,告诉您该过程已成功以及您的证书的存储位置:
Output
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2018-10-09. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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
我们已经拿到证书了。让我们看一下我们下载的内容以及如何在我们的软件中使用这些文件。
第 3 步 — 配置您的应用程序
为 SSL 配置应用程序超出了本文的范围,因为每个应用程序都有不同的要求和配置选项,但让我们看一下 Certbot 为我们下载的内容。用于ls列出保存我们的密钥和证书的目录:
sudo ls /etc/letsencrypt/live/example.com
Output
cert.pem chain.pem fullchain.pem privkey.pem README
此目录中的文件README包含有关每个文件的更多信息。大多数情况下,您只需要以下文件中的两个:
privkey.pem:这是证书的私钥。这需要保持安全和保密,这就是为什么大多数目录具有非常严格的权限并且只能由root/etc/letsencrypt用户访问的原因。大多数软件配置会将其称为类似于或 的内容。ssl-certificate-keyssl-certificate-key-file
fullchain.pem:这是我们的证书,与所有中级证书捆绑在一起。大多数软件都会使用此文件作为实际证书,并在其配置中使用“ssl-certificate”之类的名称引用它。
有关其他文件的更多信息,请参阅Certbot 文档的“我的证书在哪里”部分。
某些软件需要其他格式、其他位置或具有其他用户权限的证书。最好将所有内容保留在letsencrypt目录中,并且不要更改其中的任何权限(无论如何,权限都会在续订时被覆盖),但有时这不是一个选择。在这种情况下,您需要编写一个脚本来移动文件并根据需要更改权限。每当 Certbot 更新证书时都需要运行此脚本,我们将在接下来讨论。
第 4 步 — 启用自动证书续订
Let's Encrypt 的证书有效期只有九十天。这是为了鼓励用户自动化他们的证书更新过程。我们安装的软件包certbot包含一个 systemd 计时器,用于每天两次检查续订情况,但默认情况下它是禁用的。通过运行以下命令启用计时器:
sudo systemctl enable --now certbot-renew.timer
Output
Created symlink from /etc/systemd/system/timers.target.wants/certbot-renew.timer to /usr/lib/systemd/system/certbot-renew.timer.
您可以使用以下方法验证计时器的状态systemctl:
sudo systemctl status certbot-renew.timer
Output
● certbot-renew.timer - This is the timer to set the schedule for automated renewals
Loaded: loaded (/usr/lib/systemd/system/certbot-renew.timer; enabled; vendor preset: disabled)
Active: active (waiting) since Fri 2019-05-31 15:10:10 UTC; 48s ago
计时器应该处于活动状态。 Certbot 现在将在必要时自动更新该服务器上的任何证书。
步骤 5 — 更新证书时运行任务
现在我们的证书可以自动续订,我们需要一种在续订后运行某些任务的方法。我们至少需要重新启动或重新加载服务器才能获取新证书,并且如步骤 3 中所述,我们可能需要以某种方式操作证书文件,以使它们与我们正在使用的软件一起使用。这就是Certbot选项的目的renew_hook。
为了添加renew_hook,我们更新 Certbot 的续订配置文件。 Certbot 会记住您首次获取证书的方式的所有详细信息,并在续订时使用相同的选项运行。我们只需要添加我们的钩子。使用您喜欢的编辑器打开配置文件:
sudo vi /etc/letsencrypt/renewal/example.com.conf
将打开一个文本文件,其中包含一些配置选项。在最后一行添加你的钩子:
/etc/letsencrypt/renewal/example.com.conf
renew_hook = systemctl reload rabbitmq
将上面的命令更新为重新加载服务器或运行自定义文件修改脚本所需的任何命令。通常,在 CentOS 上,您主要用于systemctl重新加载服务。保存并关闭文件,然后运行 Certbot 试运行以确保语法正确:
sudo certbot renew --dry-run
如果没有看到任何错误,则说明一切就绪。 Certbot 设置为在必要时进行更新,并运行使用新文件获取服务所需的任何命令。
结论
在本教程中,我们安装了 Certbot Let's Encrypt 客户端,使用独立模式下载了 SSL 证书,并使用续订挂钩启用了自动续订。这将为您在典型 Web 服务器以外的服务中使用 Let's Encrypt 证书提供一个良好的开端。
评论