介绍
让我们加密是通过自动化API提供免费的SSL证书的服务。 最受欢迎的让我们加密的客户是EFF的Certbot 。
Certbot提供了多种方法来验证您的域,获取证书,并自动配置Apache和Nginx。 在本教程中,我们将讨论Certbot的独立模式以及如何使用它来保护其他类型的服务,例如邮件服务器或RabbitMQ等消息代理。
我们不会讨论SSL配置的详细信息,但完成后,您将有一个自动更新的有效证书。 此外,您将能够自动重新加载您的服务以接收更新的证书。
先决条件
在开始本教程之前,您将需要:
- Ubuntu 16.04服务器,具有非root,sudo启用的用户和基本的防火墙设置,详见Ubuntu 16.04服务器设置教程 。
- 指向您的服务器的域名,您可以通过以下“ 如何使用DigitalOcean设置主机名 ”来完成此功能。本教程将使用
example.com
。 - 端口80 或 443必须在服务器上未使用。 如果您要保护的服务位于具有两个这些端口的Web服务器的机器上,则需要使用不同的模式,例如Certbot的webroot模式 。
第1步 - 安装Certbot
Ubuntu在其默认存储库中包含Certbot客户端,但是它已经过时了。 相反,我们将从Certbot的官方Ubuntu PPA或个人包存档安装它。 这些是包装更新或更晦涩的软件的备用存储库。 首先,添加存储库:
sudo add-apt-repository ppa:certbot/certbot
您需要按ENTER
才能接受。 之后,更新软件包列表以获取新的存储库的软件包信息:
sudo apt-get update
最后,安装certbot
包:
sudo apt-get install certbot
现在我们已经安装了Certbot,我们来运行它来获取我们的证书。
第2步 - 运行Certbot
Certbot需要回答Let's Encrypt API发布的加密挑战,以证明我们控制我们的域名。 它使用端口80
(HTTP)或443
(HTTPS)来完成此操作。 在防火墙中打开相应的端口:
sudo ufw allow 80
如果这是您正在使用的端口,则替换443
。 ufw
将输出您的规则已添加的确认:
OutputRule added
Rule added (v6)
我们现在可以运行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
运行命令时,系统将提示您输入电子邮件地址并同意服务条款。 这样做后,您应该会看到一条消息,告诉您进程是否成功以及证书的存储位置:
OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
expire on 2017-10-23. To obtain a new or tweaked version of this
certificate in the future, simply run certbot again with the
"certonly" option. 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
Outputcert.pem chain.pem fullchain.pem privkey.pem README
此目录中的README
文件有关于这些文件的更多信息。 大多数情况下,您只需要两个文件:
-
privkey.pem
:这是证书的私钥。 这需要保持安全和秘密,这就是为什么大多数/etc/letsencrypt
目录具有非常严格的权限,只能由root用户访问。 大多数软件配置将会将其称为类似于ssl-certificate-key
或ssl-certificate-key-file
。 -
fullchain.pem
:这是我们的证书,与所有中间证书捆绑在一起。 大多数软件将使用该文件作为实际的证书,并将其配置中的名称称为“ssl-certificate”。
有关其他文件的更多信息,请参阅Certbot文档的“ 我的证书在哪里 ”部分。
某些软件将需要其他格式的证书,其他位置或其他用户权限。 最好把所有内容留在letsencrypt
目录中,而不是改变任何权限(权限只会在重新letsencrypt
被覆盖),但有时候这不是一个选择。 在这种情况下,您需要编写一个脚本来移动文件并根据需要更改权限。 当Certbot更新证书时,需要运行此脚本,我们将在下面讨论该脚本。
第4步 - 处理Certbot自动续订
我们加密的证书只有九十天才有效。 这是为了鼓励用户自动化其证书更新过程。 我们安装的certbot
包通过向/etc/cron.d
添加续订脚本来为我们照顾。 该脚本每天运行两次,并将更新任何在过期三十天内的证书。
随着我们的证书自动更新,我们仍然需要一种在更新后运行其他任务的方法。 我们需要至少重新启动或重新加载我们的服务器来接收新证书,如第3步所述,我们可能需要以某种方式操作证书文件,使其与我们使用的软件一起工作。 这是Certbot的renew_hook
选项的目的。
要添加renew_hook
,我们更新Certbot的续订配置文件。 Certbot记住了您首次提取证书的所有细节,并在续订时运行相同的选项。 我们只需要加入我们的钩子。 用你喜欢的编辑器打开配置文件:
sudo nano /etc/letsencrypt/renewal/example.com.conf
文本文件将打开一些配置选项。 在最后一行添加你的钩子:
renew_hook = systemctl reload rabbitmq
将上面的命令更新到需要运行的命令以重新加载服务器或运行自定义文件munging脚本。 通常,在Ubuntu上,您将主要使用systemctl
来重新加载服务。 保存并关闭文件,然后运行Certbot干运行,以确保语法正常:
sudo certbot renew --dry-run
如果你看不到任何错误,你就全部都设置好了。 Certbot将在必要时进行更新,并运行使用新文件获取服务所需的任何命令。
结论
在本教程中,我们安装了Certbot Let's Encrypt客户端,使用独立模式下载了SSL证书,并启用了具有更新挂钩的自动续订功能。 这应该给你一个很好的开始,使用我们加密证书与除了典型的Web服务器以外的服务。
有关更多信息,请参阅Certbot的文档 。