Spring Boot x509 测试 - pcf

2024-04-23

In 云铸造厂我已对其进行配置,以便将客户端证书转发到我的 Spring Boot 应用程序。

该证书被放置在x-forwarded-client-certheader 中,spring boot 应用程序读取 this?,并检查 CN 是否已列入白名单并发送适当的响应。不幸的是,我无法通过测试复制这种行为。我不断得到(在调试输出中):

“请求中找不到客户端证书”

我在用着放心我的测试如下所示:

String cert = StreamUtils.copyToString(
  new ClassPathResource("certs/client/client_mod.crt").getInputStream(), Charset.defaultCharset());

cert = cert.replace("\r\n", "").replace("\n", "");

given()
  .spec(spec)
  .header("x-forwarded-client-cert", cert)
  .when()
  .get(HealthResource.BASE_URL + "/ip-reverse-lookup")
  .then()
  .statusCode(HttpStatus.OK.value());

其基本 uri 是http://localhost。客户证书“-----BEGIN CERTIFICATE-----" and "-----END CERTIFICATE-----"已被删除并且换行符也被删除(如您在上面的代码中看到的)。

在我的 application.yml 中我有这个:

server:
  ssl:
    enabled: false
    key-store:
    key-store-password:
    trust-store:
    trust-store-password:
    client-auth: need

The configure扩展类的方法WebSecurityConfigurerAdapter看起来像这样:

http
  .x509()
  .subjectPrincipalRegex("CN=(.*?)(?:,|$)")
  .userDetailsService(customUserDetailsService)
  .and()
  .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER)
  .and()
  .csrf().disable();

任何帮助/建议将不胜感激。

Thanks.


由于容器化和网络架构的原因,您需要在实施和测试时考虑以下几点。

当您配置 Cloud Foundry 以检查客户端证书(如果存在)是否可信时,将根据受信任的 CA/证书检查它们。这是在 CF 环境的通用网络组件的 HAProxy 上完成的。正如您所正确指出的那样,它(如果包含并受信任)被放入x-forwarded-client-cert它被保证不会从外部改变。

您的应用程序在较低级别的容器中运行,并通过 HAProxy / GoRouter 连接到其公共主机名 / url。当请求到达您的应用程序时,此时不再有 TLS 级别的证书(准确地说是 mTLS)。 SSL 连接在 HAProxy 上终止。在内部,您的应用程序/容器以 HTTP 形式接收请求。 查看更多详情[1] https://docs.cloudfoundry.org/concepts/security.html#system-boundaries [2] https://docs.cloudfoundry.org/concepts/cf-routing-architecture.html#ext-client

因此,您的 Spring 应用程序仅在添加到请求的标头中接收有关 X.509 / mTLS 证书的信息。因此,向 Spring 应用程序添加/配置 x509 支持是没有意义的,因为真正的 mTLS 不会到达端点。这也是您收到上面发布的日志消息的原因。相反,您需要让应用程序读出标头并根据它执行逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot x509 测试 - pcf 的相关文章

随机推荐