如何在 Ubuntu 18.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 18.04 服务器与非根, sudo 允许的用户和基本的防火墙设置,如在 本 Ubuntu 18.04 服务器设置教程
  • 一个域名指向你的服务器,你可以通过以下[如何设置一个主机名与 DigitalOcean](https://andsky.com/tech/tutorials/how-to-set-up-a-host-name-with-digitalocean)完成这个教程将使用 example.com 整个.
  • 端口 80 443 必须在你的服务器上未使用。

步骤1:安装Certbot

Ubuntu 包括 Certbot 客户端在其默认存储库中,但它有点过时。相反,我们会从 Certbot 的官方 Ubuntu PPA 或 _Personal Package Archive 中安装它。

1sudo add-apt-repository ppa:certbot/certbot

接下来,更新包列表以获取新库的包信息:

1sudo apt update

最后,安装certbot包:

1sudo apt install certbot

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

第2步:运行Certbot

Certbot 需要回答由 Let's Encrypt API 发布的加密挑战,以便证明我们控制我们的域。它使用端口 80 (HTTP) 或 443' (HTTPS) 来完成此任务。

1sudo ufw allow 80

如果是您正在使用的端口,请更换上面的443ufw将输出确认您的规则已被添加:

1[secondary_label Output]
2Rule added
3Rule added (v6)

现在我们可以运行Certbot来获取我们的证书。我们会使用--standalone选项来告诉Certbot使用其内置的Web服务器来处理挑战。--preferred-challenges选项指示Certbot使用端口80或端口443。如果你使用端口80的话,你会想要--preferred-challenges http。对于端口443来说,这将是--preferred-challenges tls-sni。最后,使用-d旗号来指定你正在申请证书的域名。

1sudo certbot certonly --standalone --preferred-challenges http -d example.com

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

 1[secondary_label Output]
 2IMPORTANT NOTES:
 3 - Congratulations! Your certificate and chain have been saved at:
 4   /etc/letsencrypt/live/example.com/fullchain.pem
 5   Your key file has been saved at:
 6   /etc/letsencrypt/live/example.com/privkey.pem
 7   Your cert will expire on 2018-10-09. 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/example.com
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://certbot.eff.org/docs/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/example.com.conf

一个文本文件将打开一些配置选项. 添加你的链接在最后一行:

1[label /etc/letsencrypt/renewal/example.com.conf]
2renew_hook = systemctl reload rabbitmq

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

1sudo certbot renew --dry-run

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

结论

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

有关更多信息,请参阅Certbot的文档(https://certbot.eff.org/docs/)。

Published At
Categories with 技术
comments powered by Disqus