Java 如何在使用Citrus时禁用服务器证书中的主机名验证
在使用Citrus测试框架对服务器进行测试时,我无法禁用证书检查 我得到以下错误: org.springframework.web.client.ResourceAccessException:对“”的POST请求时发生I/O错误:的证书与证书主题的公用名称不匹配:;嵌套异常是javax.net.ssl.SSLException 以下是用于在Citrus中创建端点的代码片段:Java 如何在使用Citrus时禁用服务器证书中的主机名验证,java,ssl-certificate,citrus-framework,Java,Ssl Certificate,Citrus Framework,在使用Citrus测试框架对服务器进行测试时,我无法禁用证书检查 我得到以下错误: org.springframework.web.client.ResourceAccessException:对“”的POST请求时发生I/O错误:的证书与证书主题的公用名称不匹配:;嵌套异常是javax.net.ssl.SSLException 以下是用于在Citrus中创建端点的代码片段: @Bean public HttpClient myClientSSL() throws Exceptio
@Bean
public HttpClient myClientSSL() throws Exception{
return CitrusEndpoints.http()
.client()
.requestUrl("https://w.x.y.z:port")
.requestFactory(mySSLBasicAuthRequestFactory())
.build();
}
@Bean
public BasicAuthClientHttpRequestFactory mySSLBasicAuthRequestFactoryBean() {
BasicAuthClientHttpRequestFactory requestFactory = new BasicAuthClientHttpRequestFactory();
AuthScope authScope = new AuthScope(bpmServer, Integer.parseInt(bpmPort), "", "basic");
requestFactory.setAuthScope(authScope);
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(user, password);
requestFactory.setCredentials(credentials);
return requestFactory;
}
@Bean
public HttpComponentsClientHttpRequestFactory mySSLBasicAuthRequestFactory() throws Exception {
return mySSLBasicAuthRequestFactoryBean().getObject();
}
任何想法都欢迎。
thx我终于找到了一种方法,通过查看Citrus的源代码,下面是我为使其工作而想到的方法,只是把它放在这里,以防它对其他人有帮助:
@Bean
public HttpComponentsClientHttpRequestFactory mySSLBasicAuthRequestFactory() throws Exception {
AuthScope authScope = new AuthScope(myServer, myPort, "", "basic");
HttpComponentsClientHttpRequestFactory myHttpComponentsClientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory() {
@Override
protected HttpContext createHttpContext(HttpMethod httpMethod, URI uri) {
// we have to use preemptive authentication
// therefore add some basic auth cache to the local context
AuthCache authCache = new BasicAuthCache();
BasicScheme basicAuth = new BasicScheme();
// authCache.put(new HttpHost(authScope.getHost(), authScope.getPort(), "http"), basicAuth);
authCache.put(new HttpHost(authScope.getHost(), authScope.getPort(), "https"), basicAuth);
BasicHttpContext localcontext = new BasicHttpContext();
localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache);
return localcontext;
}
};
UsernamePasswordCredentials myCredentials = new UsernamePasswordCredentials(myUser, myPassword);
CredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(AuthScope.ANY, myCredentials);
CloseableHttpClient myHttpClient = HttpClients.custom()
.setSSLHostnameVerifier(new NoopHostnameVerifier())
.setDefaultCredentialsProvider(provider)
.setSslcontext(new SSLContextBuilder().loadTrustMaterial(null, (x509Certificates, s) -> true)
.build())
.build();
myHttpComponentsClientHttpRequestFactory.setHttpClient(myHttpClient);
return myHttpComponentsClientHttpRequestFactory;
}