我正在尝试使用Citrus框架来设置回归测试,因为我们将Talend ESB路由升级到最新版本。我们的路线主要是通过SSL保护我们的本地CA并需要证书进行授权。我遵循了sample-soap项目并让它暂时覆盖了证书要求。我失去了试图让它使用证书来客户端调用我们的ESB路由。我在citrusframework.org上找到了sample-https项目,但它似乎是针对Rest服务而制作的,我无法使用我的soap有效载荷。
我的最终目标是调用我们现有的路由,然后调用最新版本的路由,并将返回的XML与某种groovy代码进行比较,以验证它们是否相同。
是否存在Soap over SSL样本,可以帮助我了解我的项目出错了什么?
我尝试将sample-https代码添加到我的soap项目中但没有成功。我得到的错误是ssl-handshake错误,我知道这些错误与证书有关,因为我确定我没有在我的有效负载上附加有效的证书。
答案 0 :(得分:0)
您的配置必须与https-sample略有不同。您必须在Citrus SOAP Web服务客户端上设置消息发送者:
@Configuration
public class SoapClientSslConfig {
@Bean
public HttpClient httpClient() {
try {
SSLContext sslcontext = SSLContexts.custom()
.loadTrustMaterial(new ClassPathResource("keys/citrus.jks").getFile(), "secret".toCharArray(),
new TrustSelfSignedStrategy())
.build();
SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(
sslcontext, NoopHostnameVerifier.INSTANCE);
return HttpClients.custom()
.setSSLSocketFactory(sslSocketFactory)
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.addInterceptorFirst(new HttpComponentsMessageSender.RemoveSoapHeadersInterceptor())
.build();
} catch (IOException | CertificateException | NoSuchAlgorithmException | KeyStoreException | KeyManagementException e) {
throw new BeanCreationException("Failed to create http client for ssl connection", e);
}
}
@Bean
public HttpComponentsMessageSender sslRequestMessageSender() {
return new HttpComponentsMessageSender(httpClient());
}
}
证书在http客户端SSL上下文中配置。
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
autocrlf = false
safecrlf = false
eol = crlf
示例代码现在也可以在github上找到:https://github.com/christophd/citrus-samples/tree/master/sample-soap-ssl