介绍
Web服务器中使用SSL证书加密服务器和客户端之间的流量,为访问应用程序的用户提供额外的安全性。 Let's Encrypt提供了一种免费获取和安装受信任证书的简单方法。
本教程将告诉你如何建立一个从TLS / SSL证书让我们加密与Apache保护多个虚拟主机,一个Ubuntu 14.04服务器中。
我们还将介绍如何使用cron作业自动执行证书续订过程。
先决条件
为了完成本指南,您需要:
重要的是每个虚拟主机设置在其自己的单独的配置文件中,并且可以通过浏览器从外部访问。 有关如何在Ubuntu上正确设置Apache虚拟主机的详细指南,请访问此链接。
对于本指南的目的,我们将安装让我们为域加密证书example.com
和test.com
。 这些内容将在整个指南中引用,但您应该在使用自己的域名代替它们。
当您准备好继续时,使用您的sudo帐户登录您的服务器。
第1步 - 下载让我们加密客户端
首先,我们将下载certbot-auto
从EFF下载网站让我们的加密客户端。 客户端将在安装后根据需要自动下拉可用更新。
我们也可以下载certbot-auto
让我们的加密客户端向/usr/local/sbin
键入目录:
cd /usr/local/sbin
sudo wget https://dl.eff.org/certbot-auto
您现在应该有一个副本certbot-auto
的/usr/local/sbin
的目录。
键入以下内容以使脚本可执行:
sudo chmod a+x /usr/local/sbin/certbot-auto
该certbot-auto
客户现在应该可以使用。
第2步 - 设置证书
使用生成的SSL证书为Apache certbot-auto
让我们的客户端进行加密是非常简单的。 客户端将自动获取并安装对作为参数提供的域有效的新SSL证书。
虽然可以将多个Let's Encrypt证书捆绑在一起,即使域名不同,也建议为唯一的域名创建单独的证书。 作为一般的经验法则,只有特定域的子域应该捆绑在一起。
生成第一个SSL证书
我们将通过建立第一个虚拟主机,SSL证书开始example.com
。
我们将执行交互式安装,并获得一个捆绑的证书有效期为域和子域,即example.com
为基础域和www.example.com
的子域。 您可以将当前在Apache设置中配置的任何其他子域包括为虚拟主机或别名。
运行certbot-auto
用命令:
certbot-auto --apache -d example.com -d www.example.com
请注意,在参数列表的第一个域名将用于让我们加密创建证书的基本域,因为这个原因,我们建议您在列表中第一个通过裸顶级域名,后跟任何其他子网域或别名。
对于这个例子,在基本域将example.com
。
安装依赖关系后,您将看到有关自定义证书选项的分步指南。 你会被要求提供一个电子邮件地址丢失了密钥恢复和通知,并且您将能够使两者之间选择http
和https
访问或迫使所有请求重定向到https
。
当安装完成后,你应该能够找到生成的证书文件/etc/letsencrypt/live
。 您可以验证与以下链接您的SSL证书的状态(不要忘了你的基地域名替换example.com):
https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest
你现在应该可以使用访问您的网站https
前缀。
生成第二个SSL证书
为其他虚拟主机生成证书应遵循上一步中描述的相同过程。
重复证书安装命令,现在与您想要使用Let's Encrypt保护的第二个虚拟主机:
certbot-auto --apache -d test.com -d www.test.com
对于这个例子,在基本域将test.com
。
同样,你可以请使用以下链接您的SSL证书的状态(不要忘了你的基地域名更换test.com):
https://www.ssllabs.com/ssltest/analyze.html?d=test.com&latest
如果你想生成额外的虚拟主机证书,只需重复这个过程中,不要忘记使用裸顶级域名作为您的基本域。
第3步 - 设置自动续订
让我们加密证书有效期为90天,但建议您每60天更新证书以允许有误差。 该certbot-auto
让我们的加密客户端有一个renew
命令,可自动检测当前安装的证书,并试图续约他们,如果他们从到期日不到30天了。
要为所有已安装的域触发更新过程,您应该运行:
certbot-auto renew
因为我们最近安装了证书,所以命令将只检查到期日期并打印一条消息,通知证书不是由于更新。 输出应该类似于:
Checking for new version...
Requesting root privileges to run letsencrypt...
/home/sammy/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/example.com.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.
请注意,如果您创建了具有多个域的捆绑证书,则只有基本域名将显示在输出中,但续订应对此证书中包含的所有域有效。
确保您的证书不会过时的一个实用方法是创建一个定期执行自动更新命令的cron作业。 由于更新首先检查到期日期,并且仅当证书距离到期少于30天时才执行更新,因此可以安全地创建每周或甚至每天运行的cron作业。
让我们编辑crontab来创建一个新作业,它将每周运行续订命令。 要为root用户编辑crontab,请运行:
sudo crontab -e
将以下内容包含在一行中:
crontab
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
保存并退出。 这将创建一个新的cron作业将执行certbot-auto renew
凌晨2:30命令每星期一。 由命令生成的输出将通过管道输送到位于日志文件/var/log/le-renewal.log
。
有关如何创建和调度cron作业的更多信息,你可以检查我们如何使用cron来自动执行任务的VPS引导。
结论
在本指南中,我们看到了如何从Let's Encrypt安装免费SSL证书,以保护Apache上的多个虚拟主机。 我们建议您检查的官方咱们博客加密重要更新,不时。