在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();
如有任何帮助/建议,将不胜感激。
谢谢。
匿名用户
由于集装箱化和网络体系结构,在实施时需要考虑以下几点
当您配置云铸造来检查客户端证书(如果存在)是否可信任时,它们将根据受信任的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)}