如何在Ubuntu16.04上使用Let'sEncrypt保护RancherWeb应用程序

来自菜鸟教程
跳转至:导航、​搜索

介绍

使用 TLS/SSL 保护 Web 应用程序过去被认为仅对处理敏感信息的应用程序是必要的,因为获得官方证书需要成本并且需要额外的设置。 Let's Encrypt 让我们以自动化的方式创建官方证书,无需任何成本,这意味着我们可以将这一层安全添加到任何网站而无需权衡取舍。

Rancher 通过易于使用的仪表板以直观的方式管理 Docker 容器。 Rancher 有一个 流行应用程序目录,我们可以立即部署,包括可以生成证书的 Let's Encrypt 服务,并且在必要时还会负责更新。 创建后,证书将存储在 Rancher 中,并且可以毫无困难地使用。

在 Rancher 中设置 Let's Encrypt 的过程包括三个主要步骤:部署 Let's Encrypt 服务,将它生成的证书应用到负载均衡器,以及设置 HTTP 到 HTTPS 的重定向。 本教程将引导您完成整个过程。

先决条件

要完成本教程,您需要:

  • 一台安装了 Rancher 的 1GB Ubuntu 16.04 服务器。 要配置它,请按照教程 如何在 Ubuntu 16.04 上使用 Rancher 和 Docker 机器管理多节点部署。 您将在该教程中创建其他服务器,这些服务器将充当 Docker 容器的主机。
  • 使用 Rancher 部署的应用程序,它使用 Rancher 的内置负载均衡器服务。 虽然您可以使用任何应用程序(包括 Rancher 目录中的应用程序)按照本教程进行操作,但您还可以查看我们关于 如何在 Ubuntu 16.04 上使用 Rancher 部署 Node.js 和 MongoDB 应用程序的指南以开始使用. 无论您选择哪种路由,请确保您的配置使用 Rancher 的内置负载均衡器服务将请求转发到应用程序容器。
  • 具有 your_domainA 记录的完全限定域名 (FQDN) 指向运行 Rancher 负载均衡器服务的主机的公共 IP 地址。 这是必需的,因为 Let's Encrypt 如何验证您是否拥有它为其颁发证书的域。 您可以按照教程 How To Set Up a Host Name with DigitalOcean 来配置此记录。 在开始本教程之前,请确保您可以在 http://your_domain 上查看已部署的应用程序。

第 1 步 — 部署 Let's Encrypt 服务

我们将把 Let's Encrypt 服务部署为 Docker 容器,该容器将托管在我们的一台 Rancher 主机上。 该过程包括从 Rancher 目录中选择 Let's Encrypt 服务并填写所需信息。 完成此步骤后,您将在 Rancher 中获得一个可用的证书。 最重要的是,该服务将在证书即将到期时自动更新证书,您无需采取任何进一步的行动。

首先,通过单击 Rancher 用户界面顶部的 Catalog 菜单转到 Rancher 目录。 然后搜索 Let's Encrypt 服务。 找到后,单击查看详细信息按钮,然后按照以下步骤配置服务:

  1. 选择最新的模板版本。 本教程使用版本 0.4.0
  2. 为新的应用程序堆栈起一个独特的名称。 在本教程中,我们将其称为 Certificates,但任何名称都可以。
  3. 如果您同意条款,请在阅读信息后为 我同意 Let's Encrypt TOS 字段选择 选项。
  4. 选择 Let's Encrypt API 的 Production 版本。
  5. 您的电子邮件地址 字段中输入您的有效电子邮件地址。
  6. 对于 Certificate Name,输入证书的名称,以便您可以在 Rancher 的用户界面中轻松识别它。 您可以为此使用您的域名。
  7. 对于 Domain Names,输入您要保护的域名。 如果要保护多个域,请输入每个域,以逗号分隔。
  8. 对于 Public Key Algorithm,选择默认的 RSA-2048,这是 Web 应用程序中最常用的算法,或者选择适合您需要的算法。
  9. 对于 Renewal Time of Day 选择您要在其中更新证书的时间(以 UTC 表示)。 除非您有一些特定的限制,否则 12 的默认值可以正常工作。
  10. 对于 域验证方法 ,为本教程选择 HTTP。 您可以选择与您用于域的 DNS 提供商一起使用的其他方法。 DigitalOcean 与 Cloudflare、DNSimple、Dyn、Gandi、Ovh、Route53 和 Vultr 一起包含在列表中。 无论提供者如何,HTTP 选项都有效,这也是我们将用于本教程的方法。
  11. 其余字段与特定的 DNS 提供商有关。 由于您选择了 HTTP 方法,因此您可以将它们留空。
  12. 接下来,取消选中 创建后启动服务 复选框。 在我们进行一些额外的配置更改后,我们将启动该服务。
  13. 最后点击页面底部的【X19X】Launch【X29X】按钮启动服务,等待部署。

接下来,我们需要告诉 Racher 的负载均衡器服务将对 /.well-known/acme-challenge 的请求转发到我们新的 Certificate 服务。 没有这个,Let's Encrypt 将无法验证我们是域的所有者。 请按照以下步骤完成该过程:

  1. 在 Rancher 中找到您的负载均衡器服务,然后单击其 Upgrade/Edit 按钮。
  2. 添加新的服务规则
  3. 对于新规则: 确保访问设置为公开。 确保协议设置为 HTTP。 确保端口设置为 80。 将路径设置为 /.well-known/acme-challenge。 将目标设置为证书服务。
  4. 按此新服务的 Up 箭头,确保它是列表中的第一个服务。
  5. 按屏幕底部的编辑保存配置。

有了新规则,启动 Let's Encrypt 服务:

  1. 通过选择界面顶部的 Stacks 菜单找到您的 Certificate 堆栈。
  2. 选择 Certificates 堆栈以显示 letsencrypt 服务。
  3. Start 按钮启动服务。

此时,Let's Encrypt 服务应该正在运行,并且将创建一个证书。 该过程可能需要 5 到 15 分钟。 选择 Infrastructure 菜单并选择 Certificates 以查看证书。 不久后,您将看到新证书出现,但您可能需要刷新页面。 看到证书后,您可以将其与您的应用程序一起使用。

第 2 步 — 将证书与应用程序关联

一旦 Let's Encrypt 证书在 Rancher 中可用,您可以选择它以在 Rancher 负载均衡器服务中使用。 为此,您将更改负载均衡器中的规则以使用 HTTPS 并应用证书。 请按照以下步骤进行这些配置更改:

  1. 在 Rancher 中找到您的负载均衡器服务,然后按其 Upgrade/Edit 按钮访问其设置。
  2. Port Rules 部分中,查找将请求转发到您的应用程序的条目并将 Protocol 更改为 HTTPS 并更改 Request Host Port[ X186X] 到 443 这是 HTTPS 的默认端口。
  3. 转到页面底部的 SSL Termination 选项卡,然后在 Certificate 字段中选择要使用的证书。 如果要添加多个证书,可以在 Alternate Certs 字段中选择它们。 当您选择一个证书时,它会自动链接到相应的域。
  4. 单击页面底部的创建按钮。

如果您使用 HTTPS 协议 (https://your_domain) 访问该网站,您可以看到连接现在是安全的。 但是由于您将端口 80 替换为端口 443,任何通过 HTTP 的请求都将不再有效。 为了解决这个问题,我们可以只添加之前的 HTTP 规则和端口 80,但是,我们将调整负载均衡器以将流量从 HTTP 重定向到 HTTPS。 这可确保人们始终以安全的方式访问该站点。

第 3 步 — 将 HTTP 重定向到 HTTPS

Rancher 负载均衡器服务支持自定义 HAProxy 配置设置。 我们将使用该功能来包含一些配置,这些配置会将来自 HTTP 的所有流量重定向到 HTTPS。 本节中的方法利用您之前配置的 Let's Encrypt 服务,因为它当前正在侦听端口 80 以转发域验证请求。

要设置重定向,请在 Rancher 中找到您的负载均衡器服务,然后按 Upgrade/Edit 按钮访问设置,就像您在前面的步骤中所做的那样。 出现设置页面后,选择页面底部的 Custom haproxy.cfg 选项卡。

添加以下代码以创建重定向:

自定义 haproxy.cfg

frontend 80
acl lepath path_beg -i /.well-known/acme-challenge
redirect scheme https code 301 if  !lepath !{ ssl_fc }

这会为负载均衡器创建一条规则,将所有流量重定向到 HTTPS,但忽略我们为 Let's Encrypt 域验证配置的 /.well-known/acme-challenge 路径的请求。 我们使用 code 301 来表示我们想要对该域进行永久重定向。 要了解有关重定向设置的更多信息,您可以查看 HAProxy 文档

单击页面底部的 Edit 按钮以应用这些更改。

此时,每次您的访问者通过 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,您可以扩展您的基础架构以满足未来的需求。