提供:ZStack云计算
SSL证书负责对Web服务器之内服务器与客户端之流量提供加密保护,同时亦可为访问应用程序的用户带来额外安全保障。Let’s Encrypt作为一款免费工具,能够显著简化受信证书的获取与安装流程。
本教程将探讨如何利用 Let’s Encrypt为Ubuntu 14.04服务器中的多Apahc虚拟主机设置TLS/SSL证书。
我们还将了解如何利用cron以自动化方式实现证书续约。
要完成本教程,大家需要:
需要强调的是,每套虚拟主机都需要利用专有配置文件进行设置,并可通过浏览器接收外部访问。欲了解如何在Ubuntu环境下设置Apache虚拟主机,请参考以上链接。
在本示例中,我们将安装Let’s Encrypt证书以供example.com与test.com域名使用。这两项域名将在本教程中多次引用,不过大家亦可根据需要将下面出现的域名替换为自己的实际可用域名。
做好上述准备后,利用sudo账户登录服务器。
我们首先需要通过以下命令对软件包管理器缓存进行更新:
- sudo apt-get update
我们还需要使用git以下载Let’s Encrypt客户端,具体命令如下:
- sudo apt-get install git
接下来,我们需要从官方库处下载Let’s Encrypt客户端,并将其文件保存在服务器上的特定位置。如此一来,我们就能够在新版本推出时简化对库文件的更新流程。由于Let’s Encrpyt客户端仍处于beta测试阶段,因此其可能会进行频繁更新以修正bug并实现更多新功能。
我们还需要将Let’s Encrypt库克隆至/opt下,此目录专门负责在Unix系统上存放第三方软件:
- sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
以上命令将在/opt/letsencrypt目录下创建一套Let’s Encrypt官方库的副本。
利用Let’s Encrypt客户端可轻松生成一份面向Apache的SSL证书。该客户端能够自动获取并安装一份新的SSL证书,并通过对应参数应用于目标域名。
我们当然也可以将多套Let’s Encrypt证书加以绑定,即使其对应域名有所不同,不过这里仍然建议大家为不同的域名创建独立证书。作为一大原则性方针,只有特定域名下的子域才应被绑定在一起。
我们首先为第一套虚拟主机,即example.com,设置SSL证书。
访问letsencrypt目录:
- cd /opt/letsencrypt
接下来,我们将执行交互式安装流程并获取一套适用于域名与子域的绑定证书,其中example.com为基础域,而www.example.com则为子域。大家可以在当前配置过程中将其它子域作为Apache中的虚拟主机或者昵称。
运行letsencrypt-auto命令:
- ./letsencrypt-auto --apache -d example.com -d www.example.com
请注意,参数列表中的第一项域名应该为Let’s Encrypt用于创建此证书的基础域,因此这里建议大家将裸顶级域名直接作为列表的第一项,而后再添加其它子域名或者昵称。
在本示例中,基础域名为example.com。
在关联性安装完成后,我们需要根据分步引导对证书选项进行自定义。其会要求我们提供邮箱地址以作为密钥恢复与通知接收端,大家也可以选择启用http或者https,抑或将全部请求皆重新定向至https。
安装完成后,我们应该已经能够在/etc/letsencrypt/live当中查看生成的证书文件了。大家可使用以下命令验证该SSL证书的有效性(不要忘记将example.com替换为大家的实际基础域名):
https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest
现在我们已经可以利用https前缀访问自己的网站了。
重复以上步骤为我们的其它虚拟主机生成证书。
再次运行证书安装命令,注意将其中的域名部分修改为我们需要保护的第二套虚拟主机:
- ./letsencrypt-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
如果大家希望为更多虚拟机主机生成证书,则可重复以上过程。再次强调,请使用裸顶级域名作为基础域名。
Let’s Encrypt证书的有效周期为90天,但我们建议大家每60对其进行续约以实现容错能力。Let’s Encrypt客户端提供renew命令,其能够自动检查当前已安装的证书并在其有效期不足30天的情况下加以续约。
利用以下命令在全部已安装域中触发续约进程:
./letsencrypt-auto renew
由于我们刚刚完成证书安装,因此该命令只会检查有效期并输出一份汇总信息,表明该证书目前无需续约。其输出结果应如下所示:
Checking for new version...
Requesting root privileges to run letsencrypt...
/root/.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以创建一个新任务,本示例计划要求其每周执行续约命令。运行以下命令进行crontab编辑:
- sudo crontab -e
添加以下内容,全部归为一行:
crontab
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
保存并退出。这样我们就创建了新的cron任务,其将于每周一2:30 am执行lesencrypt-auto renew命令。该命令所生成的输出结果将被保存在/var/log/le-renewal.log日志文件当中。
欲了解更多与创建及调度cron任务相关的信息,大家可以参阅如何在VPS中使用Cron以实现自动化任务处理指南。
当有可用更新时,大家可以利用git pull命令对Let’s Encrypt目录下的本地副本进行更新:
- cd /opt/letsencrypt
- sudo git pull
全部变更都将被下载至该库,用以更新我们的客户端。
在本份教程中,我们了解了如何安装由Let’s Encrpyt提供的免费SSL证书,从而保护Apache上的多虚拟主机。由于Let’s Encrypt客户端仍处于beta测试阶段,因此建议大家检查Let’s Encrypt官方博客以随时掌握重要更新信息。
本文来源自DigitalOcean Community。英文原文:How to Set Up Let’s Encrypt Certificates for Multiple Apache Virtual Hosts on Ubuntu 14.04 By Erika Heidi
翻译:diradw