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

介绍

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

Certbot提供了多种方法来验证您的域,获取证书以及自动配置Apache和Nginx。在本教程中,我们将讨论Certbot的独立模式以及如何使用它来保护其他类型的服务,例如邮件服务器或RabbitMQ之类的消息代理。

我们不会讨论SSL配置的细节,但是当您完成后,您将拥有一个自动续订的有效证书。此外,您还可以自动重新加载服务以获取续订的证书。

先决条件

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

  • 一个Ubuntu 18.04服务器,具有非root,启用sudo权限的用户,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 在您的服务器上启用防火墙,如果您使用的是腾讯云的CVM服务器,您可以直接在腾讯云控制台中的安全组进行设置。
  • 指向您的服务器的域名,如果你没有域名,建议您先去这里注册一个域名,您需要将域名解析到您的服务器,您可以使用腾讯云云解析进行快速设置。本教程将始终使用example.com
  • 服务器上必须未使用端口80 443。如果您尝试保护的服务位于具有占用这两个端口的Web服务器的计算机上,则您需要使用其他模式,例如Certbot的webroot模式

第1步 - 安装Certbot

Ubuntu在其默认存储库中包含Certbot客户端,但它有点过时了。相反,我们将从Certbot的官方Ubuntu PPA或个人包存档中安装它。这些是包含更新或更模糊软件的备用存储库。首先,添加存储库:

sudo add-apt-repository ppa:certbot/certbot

你需要按下ENTER接受。然后,更新包列表以获取新存储库的包信息:

sudo apt update

最后,安装certbot包:

sudo apt install certbot

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

第2步 - 运行Certbot

Certbot需要回答Let's Encrypt API发布的加密挑战,以证明我们控制了我们的域名。它使用端口80(HTTP)或443(HTTPS)来完成此任务。打开防火墙中的相应端口:

sudo ufw allow 80

如果443是您正在使用的端口,请上面的内容替换它。ufw将输出您的规则已添加的确认信息:

Rule 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

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

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步 - 处理Certbot自动续订

我们的加密证书只有90天有效。这是为了鼓励用户自动执行证书续订过程。我们安装的软件包certbot通过为/etc/cron.d添加更新脚本来为我们解决这个问题。此脚本每天运行两次,并将续订在到期后30天内的任何证书。

随着我们的证书自动更新,我们仍然需要一种方法来在续订后运行其他任务。我们需要至少重新启动或重新加载我们的服务器以获取新证书,并且如步骤3中所述,我们可能需要以某种方式操作证书文件以使它们与我们正在使用的软件一起工作。这是Certbot renew_hook选项的目的。

要添加renew_hook,我们更新Certbot的续订配置文件。Certbot会记住您首次获取证书的所有详细信息,并在续订时使用相同的选项运行。我们只需添加我们的hook。使用您喜欢的编辑器打开配置文件:

sudo nano /etc/letsencrypt/renewal/example.com.conf

将打开一个包含一些配置选项的文本文件。在最后一行添加hook:

renew_hook = systemctl reload rabbitmq

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

sudo certbot renew --dry-run

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

结论

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

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

更多Ubuntu教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Use Certbot Standalone Mode to Retrieve Let's Encrypt SSL Certificates on Ubuntu 18.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沈唁志

PHP中利用PHPMailer配合QQ邮箱实现发邮件

24220
来自专栏云计算教程系列

如何在Ubuntu 18.04上使用HTTP / 2支持设置Nginx

Nginx是一个快速可靠的开源Web服务器。由于其低内存占用,高可扩展性,易于配置以及对各种协议的支持,它获得了普及。

47230
来自专栏緣來來來

申请Let's Encrypt通配符证书

Let's Encrypt支持通配符证书了,也就是说你只需要为你的网站申请*.example.com这样一个证书,所有的子域名都可以支持,下面介绍下申请方法:

67220
来自专栏散尽浮华

Linux下部署SSH登录时的二次身份验证环境记录(利用Google Authenticator)

一般来说,使用ssh远程登录服务器,只需要输入账号和密码,显然这种方式不是很安全。为了安全着想,可以使用GoogleAuthenticator(谷歌身份验证器)...

65990
来自专栏云计算教程系列

如何在Debian 9上使用Let加密来保护Nginx

我们的加密是一个证书颁发机构(CA),它提供了一种获取和安装免费TLS / SSL证书的简便方法,可以在Web服务器上启用加密的HTTPS。它通过提供软件客户端...

31940
来自专栏听Allen瞎扯淡

在公司内网如何更新IntelliJ的插件

最近小伙伴们更新IntelliJ后,发现没法安装或者更新插件了,每次尝试在线安装时总会提示SSL错误。特别是要玩Scala的小伙伴更是抓狂,因为本身Intell...

44820
来自专栏java达人

将linux下的rm命令改造成mv到指定的目录下

来源:博客园-BigBao的博客 链接:http://www.cnblogs.com/smail-bao/p/6347347.html(点击文末阅读原文前往) ...

294100
来自专栏Java技术栈

如何设计一个安全的登录流程

登录是系统中最重要的一个功能之一,登录成功就能拥有系统的使用权利,所以设计一个安全的登录流程是十分必要的,那在一般登录中需要考虑哪些重要因素呢?我们一一列表一下...

43280
来自专栏Coding+

使用 Certbot 安装 Letsencrypt 证书

1、拥有一个域名,例如 mydomain.com 2、在域名服务器创建一条A记录,指向云主机的公网IP地址。例如 demo.mydomain.com 指向 1...

72130
来自专栏编程坑太多

『中级篇』k8s的Service简介和演示(67)

PS:根据你修改的文件内容,它就自动更新了,但是ip没有发生改变,这就是service的强大。但是目前这种直接改deloyment文件的形式,不是推荐的因为他不...

75540

扫码关注云+社区

领取腾讯云代金券