如何在 Ubuntu 22.04 上使用 Certbot 独立模式检索 Let's Encrypt SSL 证书

介绍

Let's Encrypt是通过自动化API提供免费SSL证书的服务,最受欢迎的Let's Encrypt客户端是EFF(https://www.eff.org/)的Certbot(https://certbot.eff.org/)。

Certbot 提供各种方式来验证您的域名,获取证书,并自动配置 Apache 和 Nginx. 在本教程中,我们将讨论 Certbot 的 standalone 模式以及如何使用它来保护其他类型的服务,如邮件服务器或邮件经纪人如 RabbitMQ。

我们不会讨论SSL配置的细节,但一旦完成,您将有一个有效的证书,该证书会自动更新。

前提条件

在开始本教程之前,您将需要:

  • 一个 Ubuntu 22.04 服务器与非根, sudo 允许的用户和基本防火墙设置,如在 本 Ubuntu 22.04 服务器设置教程详细说明)。
  • 一个域名指向您的服务器. 如果您正在使用一个 DigitalOcean Droplet,您可以通过遵循我们的 Domains and DNS文档来实现这一点。本教程将整个使用 your_domain.
  • 端口 80 443 必须在您的服务器上未使用。 如果您试图确保的服务是在一个拥有这两个端口的 Web 服务器的机器上,您将需要使用不同的模式,如 Certbot 的 webroot mode

步骤1:安装Certbot

Certbot 建議使用其 snap 套件進行安裝. Snap 套件在幾乎所有 Linux 發行版上都工作,但他們要求您先安裝 snapd 以管理 snap 套件。

1sudo snap install core; sudo snap refresh core

如果您在之前安装了较旧版本的 certbot 的服务器上工作,您应该在继续之前移除它:

1sudo apt remove certbot

之后,您可以安装certbot包:

1sudo snap install --classic certbot

最后,您可以将certbot命令从即时安装目录链接到您的路径,因此您将能够通过键入certbot来运行它。

1sudo ln -s /snap/bin/certbot /usr/bin/certbot

现在我们已经安装了Certbot,让我们运行它来获得我们的证书。

第2步:运行Certbot

Certbot 需要回答由 Let's Encrypt API 发布的加密挑战,以证明我们控制我们的域。它使用端口 80 (HTTP) 或 443' (HTTPS) 来实现这一点。

1sudo ufw allow 80
2sudo ufw allow 443
1[secondary_label Output]
2Rule added
3Rule added (v6)

现在我们可以运行Certbot来获取我们的证书,我们将使用独立选项告诉Certbot使用其内置的Web服务器来处理挑战,最后,使用d旗号来指定您正在要求获得证书的域。

1sudo certbot certonly --standalone -d your_domain

在运行命令时,您将被要求输入电子邮件地址并同意服务条款. 这样做后,您应该看到一个消息,告诉您过程成功,您的证书存储在哪里:

 1[secondary_label Output]
 2IMPORTANT NOTES:
 3Successfully received certificate.
 4Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
 5Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
 6This certificate expires on 2022-10-02.
 7These files will be updated when the certificate renews.
 8Certbot has set up a scheduled task to automatically renew this certificate in the background.
 9
10- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
11If you like Certbot, please consider supporting our work by:
12* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
13* 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-keyssl-certificate-key-file.
  • fullchain.pem:这是我们的证书,与所有中间证书结合在一起。

有关其他文件的更多信息,请参阅 Certbot 文档的[我的证书在哪里](https://eff-certbot.readthedocs.io/en/stable/using.html#where-are-my-certificates)部分。

一些软件将需要其证书在其他格式,在其他地点,或与其他用户的权限. 最好把一切留在letsencrypt目录,而不是改变任何权限在那里(权限将只是在更新时被重写),但有时这只是不是一个选择. 在这种情况下,你需要写一个脚本来移动文件和根据需要更改权限。

步骤 4 – 处理 Certbot 自动更新

Let's Encrypt 的证书仅有效 90 天,这是为了鼓励用户自动化其证书更新流程. 我们安装的 certbot 包通过将更新脚本添加到 `/etc/cron.d 来为我们提供此功能。

我们需要至少重新启动或重新加载我们的服务器以接收新证书,正如步骤 3 中提到的,我们可能需要以某种方式操纵证书文件以使它们与我们正在使用的软件工作。

要添加一个renew_hook,我们更新了Certbot的更新配置文件。Certbot记住了您第一次获取证书的所有细节,并且在更新时将使用相同的选项运行。

1sudo nano /etc/letsencrypt/renewal/your_domain.conf

一个文本文件将打开一些配置选项. 您可以在最后一行中添加一个链接,该链接将重新加载任何面向网络的服务,使其使用更新的证书:

1[label /etc/letsencrypt/renewal/your_domain.conf]
2renew_hook = systemctl reload your_service

更新上面的命令到你需要执行的任何东西来重新加载你的服务器或运行你的自定义文件 munging 脚本. 通常,在Ubuntu上,你通常会使用systemctl来重新加载服务。

1sudo certbot renew --dry-run

Certbot 设置为在需要时更新并运行任何需要使用新文件来获取服务的命令。

结论

在本教程中,我们已经安装了Certbot Let's Encrypt客户端,使用独立模式下载了SSL证书,并启用了自动更新与更新夹。

有关更多信息,请参阅Certbot的文档(https://eff-certbot.readthedocs.io/en/stable/)。

Published At
Categories with 技术
comments powered by Disqus