介绍
Web服务器中使用SSL证书加密服务器和客户端之间的流量,为访问应用程序的用户提供额外的安全性。 Let's Encrypt提供了一种免费获取和安装受信任证书的简单方法。
本教程将向您展示如何从Let's Encrypt设置TLS / SSL证书,以保护Apache上的多个虚拟主机。 我们还将介绍如何使用cron作业自动执行证书续订过程。
先决条件
为了完成本指南,您需要:
- 一个带有非root sudo用户和防火墙的16.04服务器,您可以按照我们的初始Ubuntu 16.04服务器设置教程指南
- Apache Web服务器已安装并托管多个虚拟主机,您可以按照此Apache虚拟主机教程进行设置
为了本指南的目的,我们将为域example.com
和test.com
安装Let's Encrypt证书。 这些内容将在整个指南中引用,但您应该在遵循的同时用您自己的域代替它们。
第1步 - 安装让我们加密客户端
首先,我们将从官方知识库下载Let's Encrypt客户端。 虽然Let's Encrypt项目已将其客户端重命名为Certbot,但包含在Ubuntu 16.04存储库中的客户端简称为letsencrypt
。
更新服务器的本地包索引并安装客户端。
sudo apt-get update
sudo apt-get install python-letsencrypt-apache
letsencrypt
客户端现在已安装,所以接下来,我们将创建证书。
第2步 - 设置证书
使用Let's Encrypt客户端生成Apache的SSL证书很简单。 客户端将自动获取并安装对作为参数提供的域有效的新SSL证书。
注意 :即使域名不同,也可以将多个Let's Encrypt证书捆绑在一起。 但是,建议您为唯一的域名创建单独的证书。
因此,您需要多次执行此步骤(每个虚拟主机一次)。 作为一般的经验法则,只有特定域的子域应该捆绑在一起。
以下命令将域名列表作为-d
标志后的参数。 列出的第一个域名是Let's Encrypt用于创建证书的基本域名。 因此,我们建议您先传递裸露的顶级域名,后跟任何其他子域或别名。
启动example.com的交互式安装以为该域创建捆绑的证书。
sudo letsencrypt --apache -d example.com
安装依赖关系后,您将看到有关自定义证书选项的分步指南。 系统会要求您提供一个用于丢失密钥恢复和通知的电子邮件地址,您可以在启用http
和https
访问或强制所有请求重定向到https
之间进行选择。
安装完成后,您将能够在/etc/letsencrypt/live
中找到生成的证书文件。 您可以在https://www.ssllabs.com/ssltest/analyze.html?d= example.com &latest
上验证SSL证书的状态,现在您可以使用https
前缀访问您的网站。
请记住对您使用的每个网域重复此步骤。 完成后,下一步是将证书设置为自动续订。
第3步 - 设置自动续订
让我们加密证书有效期为90天,但最好每60天更新一次证书以允许有误差。 Let's Encrypt客户端有一个renew
命令,用于自动检查当前安装的证书,如果距离过期日期不到30天,则尝试续订。
使用续订触发所有已安装域的renew
。
sudo letsencrypt renew
因为我们最近安装了证书,所以命令将只检查到期日期并打印一条消息,通知证书不是由于更新。 输出应类似于:
OutputProcessing /etc/letsencrypt/renewal/example.com.conf
Processing /etc/letsencrypt/renewal/test.com.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
/etc/letsencrypt/live/test.com/fullchain.pem (skipped)
No renewals were attempted.
请注意,如果您创建了具有多个域的捆绑证书,则只有基本域名将显示在输出中,但续订应对此证书中包含的所有域有效。
确保您的证书不会过时的一个实用方法是创建一个定期执行自动更新命令的cron作业。 由于更新首先检查到期日期,并且仅当证书距离到期少于30天时才执行续订,因此可以安全地创建例如每周甚至每天运行的cron作业。
让我们编辑crontab来创建一个新作业,它将每周运行续订命令。 要为root用户编辑crontab,请运行:
sudo crontab -e
系统可能会提示您选择编辑器:
Outputno crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny
Choose 1-4 [2]:
选择您喜欢的编辑器,然后在crontab的结尾附加以下内容,一行:
crontab. . .
30 2 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log
这将创建一个新的cron作业,将在每周一上午2:30执行letsencrypt-auto renew
命令。 命令生成的输出将通过管道传送到位于/var/log/le-renewal.log
的日志文件。 有关如何创建和计划cron作业的更多信息,您可以在VPS指南中查看如何使用Cron自动执行任务 。
现在只需保存并退出crontab完成设置。
结论
在本指南中,我们看到了如何从Let's Encrypt安装免费SSL证书,以保护Apache上的多个虚拟主机。 我们建议您不时检查官方让我们加密博客的重要更新。