介绍
使用TLS / SSL保护网络应用程序,只有在处理敏感信息的应用程序时才被认为是必要的,因为获得官方证书有成本并需要额外的设置。 让我们加密让我们以自动化的方式创建官方证书,而不需要任何代价,这意味着我们可以将这一层安全性添加到任何网站,而无需权衡。
Rancher通过易于使用的仪表板以直观的方式管理Docker容器。 Rancher有一个我们可以立即部署的流行应用程序的目录 ,包括可以生成证书的Let's Encrypt服务,并在必要时还会进行更新。 创建后,证书将存储在Rancher中,可用于任何并发症。
设置Let's Encrypt in Rancher的过程包括三个主要步骤:我们部署Let's Encrypt服务,将其生成的证书应用于负载平衡器,并将HTTP设置为HTTPS重定向。 本教程将引导您完成整个过程。
先决条件
要完成本教程,您将需要:
- 一台安装了Rancher的1GB Ubuntu 16.04服务器。 要配置此操作,请参阅如何在Ubuntu 16.04上使用Rancher和Docker Machine管理多节点部署的教程。 您将在该教程中创建其他服务器,作为Docker容器的主机。
- 使用Rancher部署的使用Rancher内置负载平衡器服务的应用程序。 虽然您可以使用任何应用程序(包括Rancher目录中的应用程序)来了解本教程,但还可以查看有关如何在Ubuntu 16.04上部署使用Rancher的Node.js和MongoDB应用程序的指南,以开始使用。 无论选择哪种路由,请确保您的配置使用Rancher的内置负载平衡器服务将请求转发到应用程序容器。
- 具有your_domain的A记录的完全限定域名(FQDN)指向运行Rancher负载平衡器服务的主机的公共IP地址。 这是必需的,因为我们如何加密验证您拥有正在颁发证书的域名。 您可以按照教程如何使用DigitalOcean设置主机名来配置此记录。 在开始本教程之前,请确保您可以在
http:// your_domain
上查看部署的应用程序。
第1步 - 部署我们的加密服务
我们将把Let's Encrypt服务部署为Docker容器,该容器将在我们的Rancher主机之间托管。 该过程包括从Rancher目录中选择Let's Encrypt服务并填写所需的信息。 完成此步骤后,您将在Rancher中提供证书。 最重要的是,在接近到期时,服务将自动续订证书,而您无需采取任何进一步措施。
要开始,请点击Rancher用户界面顶部的Catalog菜单。 然后搜索Let's Encrypt服务。 找到它后,单击“ 查看详细信息 ”按钮,然后按照以下步骤配置服务:
- 选择最新的模板版本。 本教程使用版本0.4.0 。
- 给新应用程序一个独特的名称。 我们将在本教程中称之为证书 ,但任何名称都可以正常工作。
- 如果您同意这些条款,请在阅读信息后,选择“ 我同意加入TOS”字段的“是”选项。
- 选择Let's Encrypt API的Production版本。
- 在“ 电子邮件地址”字段中输入有效的电子邮件地址。
- 对于证书名称 ,输入证书的名称 ,以便您可以在Rancher的用户界面中轻松识别它。 您可以使用您的域名。
- 对于域名 ,输入要保护的域名。 如果要保护多个域,请输入每个域,并用逗号分隔。
- 对于公共密钥算法 ,选择默认的RSA-2048 ,这是Web应用程序中最常用的算法,或者选择一种符合您需求的算法。
- 对于续订时间选择您希望更新证书的一天中的UTC时间。 默认值12将正常工作,除非您有一些特定的限制。
- 对于域验证方法 ,请为本教程选择HTTP 。 还有其他可以选择的方法可以与您为域使用的DNS提供商配合使用。 DigitalOcean与Cloudflare,DNSimple,Dyn,Gandi,Ovh,Route53和Vultr一起列入名单。 HTTP选项的工作原理,无论提供者如何,是我们将在本教程中使用的方法。
- 其余字段与特定DNS提供程序相关。 由于您选择了HTTP方法,您可以将其留空。
- 接下来, 在创建复选框后取消选中启动服务 。 在我们进行一些额外的配置更改后,我们将启动该服务。
- 最后,点击页面底部的启动按钮启动服务,等待部署。
接下来,我们需要告诉Racher的负载平衡器服务,将/.well-known/acme-challenge
请求/.well-known/acme-challenge
到我们的新证书服务。 没有了,我们加密将无法验证我们是域的所有者。 按照以下步骤完成此过程:
- 在Rancher找到您的负载平衡器服务,然后单击其升级/编辑按钮。
- 添加新的服务规则 。
- 对于新的规则:
- 确保Access设置为Public 。
- 确保协议设置为HTTP 。
- 确保端口设置为
80
。 - 设置路径到
/.well-known/acme-challenge
。 - 将目标设置为证书服务。
- 按向上箭头,以确保它是列表中的第一个服务。
- 按屏幕底部的编辑保存配置。
根据新的规则,启动Let's Encrypt服务:
- 通过选择界面顶部的“ 堆叠 ”菜单找到您的证书。
- 选择证书以显示letsencrypt服务。
- 按开始按钮启动服务。
此时,我们的加密服务应该运行,并且将创建一个证书。 该过程可能需要5到15分钟。 选择基础设施菜单,然后选择证书以查看证书。 在短时间内,您会看到新证书出现,尽管您可能需要刷新页面。 一旦您看到证书,您可以将其与您的应用程序一起使用。
第2步 - 将证书与应用程序链接
一旦在Rancher中提供了Let's Encrypt证书,您可以选择它在Rancher Load Balancer服务中使用。 为此,您将更改负载平衡器中的规则以使用HTTPS并应用证书。 按照以下步骤进行这些配置更改:
- 在Rancher找到您的负载平衡器服务,然后按升级/编辑按钮访问其设置。
- 在“ 端口规则”部分中,查找将请求转发到应用程序的条目,并将协议更改为HTTPS ,并将请求主机端口更改为443 ,这是HTTPS的默认端口。
- 转到页面底部的“ SSL终止 ”选项卡,然后在“ 证书”字段中选择要使用的证书 。 如果要添加多个证书,可以在“ 备用证书”字段中选择它们。 当您选择证书时,它会自动链接到相应的域。
- 点击页面底部的创建按钮。
如果您使用HTTPS协议( https:// your_domain
)访问该网站,则可以看到该连接现在是安全的。 但是,由于您使用端口443
替换端口80
,所以通过HTTP的任何请求将不再工作。 为了解决这个问题,我们可以添加我们以前使用的HTTP和端口80
的规则,而是调整我们的负载平衡器,将流量从HTTP重定向到HTTPS。 这样可以确保人们始终以安全的方式访问该网站。
第3步 - 将HTTP重定向到HTTPS
Rancher负载平衡器服务支持自定义HAProxy配置设置。 我们将使用该功能来包含一些将HTTP的所有流量重定向到HTTPS的配置。 本节中的方法利用您之前配置的Let's Encrypt服务,因为它正在监听端口80
以转发域验证请求。
要设置重定向,请在Rancher中找到负载均衡器服务,然后按升级/编辑按钮访问设置,如同前面步骤中所述。 出现设置页面后,选择页面底部的自定义haproxy.cfg选项卡。
添加以下代码片段来创建重定向:
frontend 80
acl lepath path_beg -i /.well-known/acme-challenge
redirect scheme https code 301 if !lepath !{ ssl_fc }
这将为负载平衡器创建一个规则,将所有流量重定向到HTTPS,但忽略为我们为加密域验证配置的/.well-known/acme-challenge
路径的请求。 我们使用code 301
来表示我们要永久重定向到此域。 要了解有关重定向设置的更多信息,可以查看HAProxy文档 。
单击页面底部的编辑按钮以应用这些更改。
此时,每次访问者通过HTTP访问网站时,都会将其重定向到HTTPS,从而使网站安全。 现在我们可以继续测试我们的网站。
第4步 - 测试安装程序
要测试您的网站,请使用HTTP协议( http:// your_domain
)在Web浏览器中打开该地址,然后在地址栏中查找安全指示器。 您还可以使用curl
实用程序通过执行以下命令来测试它,该命令向服务器发送请求,遵循任何重定向,并仅返回响应头:
curl -I -L http://your_domain
您应该看到如下结果:
OutputHTTP/1.1 301 Found
Cache-Control: no-cache
Content-length: 0
Location: https://your_domain/
Connection: close
HTTP/1.1 200 OK
Cache-Control: public, max-age=0
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
Date: Sun, 19 Feb 2017 03:42:47 GMT
第一个输出块显示当首次通过HTTP请求网站时发出响应,表示找到该位置,但该位置现在位于另一个地址中。 注意301 Found
部分,它告诉你,我们添加的HAProxy规则是有效的。 “ Location
部分显示所请求资源的新位置。 第二个输出块显示curl
跟随重定向到新位置。 它还显示网站已经在新的位置找到,如200 OK
响应所示。
结论
在本教程中,您可以使用Rancher和Let's Encrypt服务在网站上设置HTTPS。 获得一个安全的网站现在比以往任何时候都更容易,您不用担心不断更新证书或设置其他任务工具。 而与Rancher一起,您可以扩展您的基础架构,以满足未来的需求。