介绍
Let's Encrypt是一个通过自动化API提供免费SSL证书的服务,最受欢迎的Let's Encrypt客户端是EFF的Certbot客户端。
Certbot 提供各种方式来验证您的域名、获取证书,并自动配置 Apache和 Nginx。
我们不会讨论SSL配置的细节,但一旦完成,您将有一个有效的证书,该证书会自动更新。
前提条件
在开始本教程之前,您将需要:
- Debian 10 服务器,具有
sudo
特权的非根用户,以及在 [本 Debian 10 服务器设置教程]中详细描述的基本防火墙(https://andsky.com/tech/tutorials/initial-server-setup-with-debian-10)。 - 指向您的服务器的域名,您可以通过遵循此文档(https://www.digitalocean.com/docs/networking/dns/)在 DigitalOcean 上创建 DNS 记录
- 端口
80
或443
必须在您的服务器上 **未使用。
步骤1:安装Certbot
Debian 10 将 Certbot 客户端包含在其默认存储库中,并且它应该足够为基本使用而更新. 如果您需要进行基于 DNS 的挑战或使用其他更新的 Certbot 功能,您应该根据 官方 Certbot 文档的指示,从buster-backports
复制器中安装。
更新您的包列表:
1sudo apt update
使用apt
来安装certbot
包:
1sudo apt install certbot
您可以通过要求certbot
输出其版本号来测试您的安装:
1certbot --version
1[secondary_label Output]
2certbot 0.31.0
现在我们已经安装了Certbot,让我们运行它来获得我们的证书。
第2步:运行Certbot
Certbot 需要回答由 Let's Encrypt API 发布的加密挑战,以便证明我们控制我们的域。它使用端口 80 (HTTP) 或
443' (HTTPS) 来完成此任务。
1sudo ufw allow 80
如果是您正在使用的端口,请更换上面的443
。ufw
将输出确认您的规则已被添加:
1[secondary_label Output]
2Rule added
3Rule added (v6)
现在我们可以运行Certbot来获取我们的证书。我们将使用独立
选项告诉Certbot使用其内置的Web服务器来处理挑战。偏好挑战
选项指示Certbot使用端口80
或端口443
。如果您正在使用端口80
,您将使用偏好挑战HTTP
选项。对于端口443
,使用偏好挑战 tls-sni
。
我们将使用--preferred-challenges http
选项来演示,但您应该使用适用于您的使用案例的选项。
1sudo certbot certonly --standalone --preferred-challenges http -d your_domain
在运行命令时,您将被要求输入电子邮件地址并同意服务条款. 这样做后,您应该看到一个消息,告诉您过程成功,您的证书存储在哪里:
1[secondary_label Output]
2IMPORTANT NOTES:
3 - Congratulations! Your certificate and chain have been saved at:
4 /etc/letsencrypt/live/your_domain/fullchain.pem
5 Your key file has been saved at:
6 /etc/letsencrypt/live/your_domain/privkey.pem
7 Your cert will expire on 2019-08-28. To obtain a new or tweaked
8 version of this certificate in the future, simply run certbot
9 again. To non-interactively renew *all* of your certificates, run
10 "certbot renew"
11 - Your account credentials have been saved in your Certbot
12 configuration directory at /etc/letsencrypt. You should make a
13 secure backup of this folder now. This configuration directory will
14 also contain certificates and private keys obtained by Certbot so
15 making regular backups of this folder is ideal.
16 - If you like Certbot, please consider supporting our work by:
17
18 Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
19 Donating to EFF: https://eff.org/donate-le
让我们看看我们下载了什么以及如何使用我们的软件的文件。
步骤3 - 配置您的应用程序
配置您的应用程序为SSL超出了本文的范围,因为每个应用程序都有不同的要求和配置选项,但让我们看看Certbot为我们下载了什么。
1sudo ls /etc/letsencrypt/live/your_domain
您将看到以下结果:
1[secondary_label Output]
2cert.pem chain.pem fullchain.pem privkey.pem README
该目录中的README
文件包含有关每个文件的更多信息. 最常见的是,您只需要两个文件:
privkey.pem
:这是证书的私钥。这需要保持安全和秘密,这就是为什么大多数/etc/letsencrypt
目录具有非常限制的权限,只能由 root 用户访问。大多数软件配置将称之为ssl-certificate-key
或ssl-certificate-key-file
.fullchain.pem
:这是我们的证书,与所有中间证书结合在一起。
有关其他文件的更多信息,请参阅 Certbot 文档的 我的证书在哪里? 部分。
一些软件将需要其证书在其他格式或位置,或与其他用户权限。最好把一切留在letsencrypt
目录中,而不是在那里更改任何权限(权限都会在更新时被重写),但有时这不是一个选择。
步骤 4 – 处理 Certbot 自动更新
Let's Encrypt 证书仅有效 90 天,这是为了鼓励用户自动更新证书的过程. 我们安装的 certbot
包通过将更新脚本添加到 `/etc/cron.d 来为我们提供此功能。
我们需要至少重新启动或重新加载我们的服务器以获取新证书,正如步骤 3 中提到的,我们可能需要以某种方式操纵证书文件以使它们与我们正在使用的软件工作。
要添加renew_hook
,我们需要更新 Certbot 的更新配置文件。Certbot 记住了您第一次获取证书的所有细节,并且在更新时将使用相同的选项运行。
1sudo nano /etc/letsencrypt/renewal/your_domain.conf
一个文本文件将打开一些配置选项. 在最后一行中添加你的钩子. 在这种情况下,我们正在使用一个例子,该例子将重新加载一个‘rabbitmq’服务:
1[label /etc/letsencrypt/renewal/your_domain.conf]
2renew_hook = systemctl reload rabbitmq
上面的命令更新到你需要运行的任何东西来重新加载你的服务器或运行你的自定义文件模拟脚本. 在 Debian 上,你通常会使用systemctl
来重新加载服务。
保存并关闭文件,然后运行Certbot干运行,以确保语法正常:
1sudo certbot renew --dry-run
Certbot 设置为在需要时更新并运行任何需要使用新文件来获取服务的命令。
结论
在本教程中,我们已经安装了Certbot Let's Encrypt客户端,使用独立模式下载了SSL证书,并启用了自动更新与更新夹。
有关更多信息,请参阅Certbot的文档(https://certbot.eff.org/docs/)。