如何使用Certbot独立模式检索我们在CentOS 7上加密SSL证书

Let's Encrypt是一项通过自动API提供免费SSL证书的服务。最受欢迎的Let's Encrypt客户端是EFF的Certbot。 Certbot提供多种方式来验证您的...

介绍

Let's Encrypt是一项通过自动API提供免费SSL证书的服务。 最受欢迎的Let's Encrypt客户端是EFFCertbot

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
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

运行该命令时,系统将提示您输入电子邮件地址并同意服务条款。 执行此操作后,您应该看到一条消息,告诉您进程是否成功以及您的证书存储位置:

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
cert.pem  chain.pem  fullchain.pem  privkey.pem  README

此目录中的README文件包含有关每个文件的更多信息。 大多数情况下,您只需要其中两个文件:

  • privkey.pem :这是证书的私钥。 这需要保持安全和保密,这就是大多数/etc/letsencrypt目录具有非常严格的权限并且只有root用户可访问的原因。 大多数软件配置都将此称为类似于ssl-certificate-keyssl-certificate-key-file
  • fullchain.pem :这是我们的证书,与所有中间证书捆绑在一起。 大多数软件都会将此文件用于实际证书,并在其配置中使用“ssl-certificate”之类的名称引用它。

有关存在的其他文件的更多信息,请参阅Certbot文档的“ 我的证书在哪里 ”部分。

某些软件需要其他格式的证书,其他位置或其他用户权限。 最好将所有内容保留在letsencrypt目录中,而不是更改其中的任何权限(无论如何都会在续订时覆盖权限),但有时这不是一个选项。 在这种情况下,您需要编写脚本来移动文件并根据需要更改权限。 只要Certbot更新证书,就需要运行此脚本,我们将在下面讨论。

第4步 - 启用自动证书续订

我们的加密证书只有90天有效。 这是为了鼓励用户自动执行证书续订过程。 我们安装的certbot软件包包括一个systemd计时器,用于每天检查两次续订,但默认情况下禁用。 通过运行以下命令启用计时器:

sudo systemctl enable --now certbot-renew.timer
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
● 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

将上面的命令更新为运行所需的任何内容以重新加载服务器或运行自定义文件munging脚本。 通常,在CentOS上,您将主要使用systemctl来重新加载服务。 保存并关闭该文件,然后运行Certbot干运行以确保语法正常:

sudo certbot renew --dry-run

如果您没有看到任何错误,那么您已经完成了设置。 Certbot将在必要时进行更新,并运行使用新文件获取服务所需的任何命令。

结论

在本教程中,我们安装了Certbot Let的加密客户端,使用独立模式下载了SSL证书,并启用了具有续订挂钩的自动续订。 这应该可以让您在使用Let的加密证书时使用除典型Web服务器之外的服务。

有关更多信息,请参阅Certbot的文档