当前位置: 首页 > 知识库问答 >
问题:

Spring靴x509测试-pcf

赫连卓
2023-03-14

在CloudFoundry中,我对其进行了配置,以便将客户端证书转发给我的spring boot应用程序。

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

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

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

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-->”和“”----END certificate-->”已被删除,换行符也已删除(如上面代码所示)。

在我的application.yml我有这个:

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

扩展WebSecurityConfigureAdapter的类的configure方法如下所示:

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

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

谢谢。


共有1个答案

卜勇
2023-03-14
匿名用户

由于集装箱化和网络体系结构,在实施时需要考虑以下几点

当您配置云铸造来检查客户端证书(如果存在)是否可信任时,它们将根据受信任的CA/证书进行检查。这是在CF景观的一般网络组件的HAProxy上完成的。正如您正确指出的那样,它(如果包含并受信任)被放入x-转发-客户端-证书中,该被保护为从外部不可更改。

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

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

 类似资料:
  • 我有一个cucumber项目,它使用spring boot和testng。 这里是主要课程 我没有测试。xml文件,因为测试是通过spring boot启动的。出于某些原因,我想优先考虑测试,我发现我可以使用QAF(https://qmetry.github.io/qaf/latest/scenario-meta-data.html#pre-为bdd定义的元数据)。我试着用它,但没用。 以下是我所

  • 我在spock和groovy的初始阶段,我试图测试一个简单的Spring启动应用程序,并获得 下面是我的java和groovy代码以及异常详细信息 TestController.java TestControllerSpec。棒极了 我确信我的代码遗漏了什么

  • 我有一个应用程序,使用经典的Spring配置与xml,它可以使用Spring启动仅用于单元测试? 像这样:

  • 我在我的应用程序中使用和。我想将控制器协议从版本切换到。首先,我已经为此编写了下一个集成测试: 但是方法不存在,而且我找不到任何其他测试协议版本的方法。有人知道如何在spring boot应用程序中正确测试协议版本吗?

  • 我正在用Spring boot为Camel编写一个测试。下面是测试类的配置 我认为骆驼不应该被启动。但当我运行测试时,它已经开始了。 我注意到CamelSpringBootRunner确实在CamelSpringBootExecutionListener中启动了camel上下文。 如何强制不启动骆驼上下文。

  • 没有“org.apache.camel.CamelContext”类型的合格bean可用:应至少有一个合格的自带候选bean。 依赖项注释:{@org.SpringFramework.Beans.Factory.Annotation.AutoWired(required=true)}