弹簧靴X509测试-PCF [英] Spring boot x509 testing - pcf

查看:0
本文介绍了弹簧靴X509测试-PCF的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Cloud Foundry中,我对其进行了配置,以便将客户端证书转发到我的Spring Boot应用程序。

证书被放在x-forwarded-client-cert头中,Spring Boot应用程序读取这个?,并检查CN是否被列入白名单并发送适当的响应。不幸的是,我无法通过测试来复制这种行为。我继续收到(在调试输出中):

"在请求中未找到客户端证书"

我使用的是REST ASSERED,我的测试如下所示:

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

cert = cert.replace("
", "").replace("
", "");

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-----""-----END CERTIFICATE-----"已被删除,换行符也已删除(如您在上面的代码中所见)。

在我的应用程序.yml中有:

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

扩展WebSecurityConfigurerAdapter的类的configure方法如下:

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

如有任何帮助/建议,我们将不胜感激。

谢谢。

推荐答案

鉴于集装箱化和网络架构,您在实施和测试时需要考虑以下几点。

当您配置Cloud Foundry以检查客户端证书(如果存在)是可信任的时,将对照受信任的CA/证书对它们进行检查。这是在CF环境的一般网络组件的HAProxy上完成的。正如您正确说明的那样,它(如果包含并受信任)被放入x-forwarded-client-cert,该x-forwarded-client-cert被保护为不能从外部更改。

您的应用程序运行在较低级别的容器中,并通过HAProxy/GoRouter连接到其公共主机名/url。当请求到达您的应用程序时,此时不再有TLS级别的证书(准确地说是mTLS)。在HAProxy上终止SSL连接。在内部,您的应用程序/容器以HTTP形式接收请求。 有关详细信息,请参阅[1][2]

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

这篇关于弹簧靴X509测试-PCF的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆