如何在Ubuntu14.04上为多个Apache虚拟主机设置Let'sEncrypt证书
介绍
SSL 证书在 Web 服务器中用于加密服务器和客户端之间的流量,为访问您的应用程序的用户提供额外的安全性。 Let's Encrypt 提供了一种免费获取和安装可信证书的简单方法。
本教程将向您展示如何在 Ubuntu 14.04 服务器中设置 Let's Encrypt 的 TLS/SSL 证书,以保护 Apache 上的多个虚拟主机。
我们还将介绍如何使用 cron 作业自动执行证书更新过程。
- 先决条件
为了完成本指南,您需要:
重要的是,每个虚拟主机都设置在自己单独的配置文件中,并且可以通过浏览器从外部访问。 有关如何在 Ubuntu 上正确设置 Apache 虚拟主机的详细指南,请点击 此链接 。
出于本指南的目的,我们将为域 example.com
和 test.com
安装 Let's Encrypt 证书。 这些将在整个指南中被引用,但您应该在跟随时将它们替换为您自己的域。
当您准备好继续前进时,使用您的 sudo 帐户登录您的服务器。
- Step 1 — 下载 Let's Encrypt 客户端
使用 Let's Encrypt 获取 SSL 证书的第一步是在您的服务器上安装 certbot
软件。 Certbot 开发人员使用最新版本的软件维护自己的 Ubuntu 软件存储库。 由于 Certbot 处于如此积极的开发中,因此值得使用此存储库来安装比 Ubuntu 提供的更新的 Certbot。
首先,添加存储库:
sudo add-apt-repository ppa:certbot/certbot
您需要按 ENTER
接受。 之后,更新包列表以获取新存储库的包信息:
sudo apt-get update
最后,使用 apt-get
从新存储库安装 Certbot:
sudo apt-get install python-certbot-apache
certbot
Let's Encrypt 客户端现在可以使用了。
- Step 2 — 设置证书
使用 certbot
Let's Encrypt 客户端为 Apache 生成 SSL 证书非常简单。 客户端将自动获取并安装对作为参数提供的域有效的新 SSL 证书。
虽然可以将多个 Let's Encrypt 证书捆绑在一起,但即使域名不同,建议您为唯一的域名创建单独的证书。 作为一般经验法则,只有特定域的子域应该捆绑在一起。
- 生成第一个 SSL 证书
我们将从为第一个虚拟主机 example.com
设置 SSL 证书开始。
我们将执行交互式安装并获得一个对域和子域都有效的捆绑证书,即example.com
作为基域,www.example.com
作为子域。 您可以将当前在 Apache 设置中配置为虚拟主机或别名的任何其他子域包括在内。
使用以下命令运行 certbot
命令:
sudo certbot --apache -d example.com -d www.example.com
请注意,参数列表中的第一个域名将是 Let's Encrypt 用于创建证书的 base 域,因此我们建议您将裸顶级域名作为第一个传递列表,后跟任何其他子域或别名。
对于此示例,base 域将为 example.com
。
安装依赖项后,您将看到一个分步指南来自定义您的证书选项。 您将被要求提供丢失密钥恢复和通知的电子邮件地址,并且您可以选择启用 http
和 https
访问或强制所有请求重定向到 https
。
安装完成后,您应该可以在 /etc/letsencrypt/live
找到生成的证书文件。 您可以使用以下链接验证 SSL 证书的状态(不要忘记将 example.com 替换为您的 base 域):
https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest
您现在应该可以使用 https
前缀访问您的网站。
生成第二个 SSL 证书
为您的其他虚拟主机生成证书应遵循上一步中描述的相同过程。
重复证书安装命令,现在使用您要使用 Let's Encrypt 保护的第二个虚拟主机:
sudo certbot --apache -d test.com -d www.test.com
对于此示例,base 域将为 test.com
。
同样,您可以使用以下链接验证 SSL 证书的状态(不要忘记将 test.com 替换为您的 base 域):
https://www.ssllabs.com/ssltest/analyze.html?d=test.com&latest
如果您想为其他虚拟主机生成证书,只需重复该过程,并且不要忘记使用裸顶级域作为您的 base 域。
- Step 3 - 设置自动续订
Let's Encrypt 的证书有效期只有九十天。 这是为了鼓励用户自动化他们的证书更新过程。 我们需要设置一个定期运行的命令来检查过期证书并自动更新它们。
为了每天运行更新检查,我们将使用 cron
,这是一种用于运行定期作业的标准系统服务。 我们通过打开和编辑一个名为 crontab
的文件来告诉 cron
要做什么。
sudo crontab -e
您的文本编辑器将打开默认的 crontab,这是一个包含一些帮助文本的文本文件。 在文件末尾粘贴以下行,然后保存并关闭它:
crontab
. . . 15 3 * * * /usr/bin/certbot renew --quiet
该行的 15 3 * * *
部分表示“每天凌晨 3:15 运行以下命令”。 您可以随时选择。
Certbot 的 renew
命令将检查系统上安装的所有证书,并更新任何设置为在 30 天内到期的证书。 --quiet
告诉 Certbot 不要输出信息也不要等待用户输入。
cron
现在将每天运行此命令。 因为我们使用 --apache
插件安装了我们的证书,Apache 也将被重新加载以确保使用新的证书。
有关如何创建和安排 cron 作业的更多信息,您可以在 VPS 指南中查看我们的 How to Use Cron to Automate Tasks。
##结论
在本指南中,我们了解了如何从 Let's Encrypt 安装免费的 SSL 证书,以保护 Apache 上的多个虚拟主机。 我们建议您不定期查看官方 Let's Encrypt 博客 以获取重要更新。