Java 从jboss中部署的服务到第三方api网关的SOAP请求
我有一个服务(部署在JBossAS7中的SpringBootWar),它使用JavaSOAP客户端(我使用SpringWS),需要使用相互身份验证调用api网关公开的第三方Web服务器。我可以通过直接使用jks文件初始化ssl上下文发出请求,如下所示Java 从jboss中部署的服务到第三方api网关的SOAP请求,java,soap,jboss,client,sslcontext,Java,Soap,Jboss,Client,Sslcontext,我有一个服务(部署在JBossAS7中的SpringBootWar),它使用JavaSOAP客户端(我使用SpringWS),需要使用相互身份验证调用api网关公开的第三方Web服务器。我可以通过直接使用jks文件初始化ssl上下文发出请求,如下所示 SSLContext sslcontext = getSSLContext(); SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext, new
SSLContext sslcontext = getSSLContext();
SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslcontext, new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
HttpClientBuilder httpClientBuilder = HttpClients.custom();
... }
private SSLContext getSSLContext() throws KeyStoreException, NoSuchAlgorithmException, IOException, KeyManagementException, java.security.cert.CertificateException, UnrecoverableKeyException {
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(keyStore.getInputStream(), keyStorePassword.toCharArray());
logger.debug("Loaded keystore: " + keyStore.getURI().toString());
try {
keyStore.getInputStream().close();
} catch (IOException e) {
}
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
keyManagerFactory.init(ks, keyStorePassword.toCharArray());
KeyStore ts = KeyStore.getInstance("JKS");
ts.load(trustStore.getInputStream(), trustStorePassword.toCharArray());
logger.debug("Loaded trustStore: " + trustStore.getURI().toString());
try {
trustStore.getInputStream().close();
} catch (IOException e) {
}
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(ts);
SSLContextBuilder sslContextBuilder = SSLContexts.custom();
try {
sslContextBuilder = SSLContexts.custom().loadKeyMaterial(ks, keyStorePassword.toCharArray());
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
}
sslContextBuilder.loadTrustMaterial(ts, new TrustAllStrategy());
return sslContextBuilder.build();
}
但是我想使用jboss配置中定义的ssl上下文
<tls>
<key-stores>
<key-store name="MyKeyStore">
<credential-reference clear-text="MyPass"/>
<implementation type="JKS"/>
<file path="/home/jboss/mycertstore.jks"/>
</key-store>
</key-stores>
<key-managers>
<key-manager name="myKM" algorithm="PKIX" key-store="myKeyStore">
<credential-reference store="credstore" alias="mycred_alias"/>
</key-manager>
</key-managers>
<trust-managers>
<trust-manager name="myTM" key-store="myKeyStore"/>
</trust-managers>
<client-ssl-contexts>
<client-ssl-context name="mySSLName" protocols="TLSv1.2" key-manager="myKM" trust-manager="myTM"/>
</client-ssl-contexts>
</tls>
是否可以在我的客户端中使用SSLContext“mySSLName”作为javax.net.ssl.SSLContext
希望我的问题清楚
谢谢