首页 > 解决方案 > 在关键的 Cloud Foundry 中使用受信任的 SSL 证书和 Spring Boot

问题描述

我是 SSL 证书主题的新手,我想安装我购买的 SSL,这样当用户进入我的网站时,他们不会看到不受信任的证书警告,这是我到目前为止所做的步骤

  1. 使用 keytool 创建了一个 p12 文件
  2. 从步骤 1 中的文件创建了一个 csr 文件
  3. 将 csr 上传到我的 ssl 供应商并通过他们对我的域的验证后,下载以下文件:.crt、.ca-bundle、.p7b 文件

我将所有文件(包括我生成的文件)放在资源目录中并添加了以下属性

server.ssl.key-store:classpath:myFile.p12
server.ssl.key-store-password:some_pass
server.ssl.keyStoreType:PKCS12
server.ssl.keyAlias:someAlias

我后来运行了以下命令:keytool -importcert - 尝试将我从 ssl 供应商获得的文件导入到我创建的文件 (.p12)

比我创建了我的 jar 并将其上传到关键云代工厂,但我仍然看到无效的证书消息

我不知道我是否需要在关键平台上做某事或在 spring boot config 上做某事

标签: spring-bootsslcloud-foundry

解决方案


唯一可行的方法是使用 TCP 路由。使用 Cloud Foundry 上的标准 HTTP 路由,流量首先到达负载均衡器,然后到达 Gorouter。TLS 终止将在那里发生,而不是在您的应用程序中。如果您使用 TCP 路由,这将在 TCP 级别进行负载平衡,并允许您的应用程序直接执行 TLS 终止。

也就是说,你真的不想这样做。TCP 路由不太可能允许您选择端口 443,因为一个端口只能分配给一个应用程序。这意味着只有一个使用 TCP 路由的应用程序可以使用端口 443。此外,在大多数情况下,平台运营商只允许 TCP 路由的高编号端口,这意味着没有人能够选择 443。长话短说,你不想要您的用户必须以https://www.example.com:47385的身份访问您的站点,因此您不需要 TCP 路由。


要使用标准 HTTP 路由正确设置它,您需要与您的平台运营团队合作。您将需要一起执行以下操作:

  1. 获取您要使用的域。
  2. 获取负载均衡器。这需要配置为将流量路由到基础中的 Gorouter。您可以跳过此步骤并使用现有的负载均衡器,但这会对下面的步骤 #6 产生影响[1]。
  3. 为您的域配置 DNS,以便它在步骤 #2 中路由到负载均衡器。
  4. 将域添加为 CF 中的私有或共享域。
  5. 使用您在第 3 步中创建的域将路由映射到您的应用程序。
  6. 将您的 TLS 证书和密钥添加到负载均衡器 [1]。

完成所有这些操作后,流向您域的流量将解析为负载均衡器的 IP。您的用户的浏览器将向 LB 发出 HTTPS 请求,它将终止 TLS(如果是 HTTP/layer-7 LB),并转发到 Gorouter(如果有 TCP/layer-4 LB,则 TLS 在此处终止),然后转发到您的应用程序(基于您映射的路线)。

您的应用程序需要查看x-forwarded-forx-forwarded-proto标头以确认请求是否通过 HTTPS 传入,因为它不会直接终止 TLS。

[1] - 这与证书的安装方式有关。使用单独的 LB,您将证书添加到其中并完成。如果您尝试重用平台 LB,则需要将证书添加到现有的证书列表中。此外,如果您的平台运营团队正在使用 TCP/layer-4 负载均衡器,则 TLS 终止不会发生在 LB,它会发生在 Gorouter。这意味着您必须将 TLS 证书加载到 Gorouter 中,这需要 Bosh 部署并且需要更多工作。修改平台 LB 也存在导致基础崩溃的错误风险。出于这些原因以及更多原因,为您的应用添加单独的 LB 通常是可行的方法。


推荐阅读