我正在Wildfly 13上实现双向ssl身份验证,在这里我已部署了使用SOAP进行通信的服务器和客户端应用程序。
在服务器(在Wildfly级别上配置)的密钥库中,我有一个自签名证书(服务器证书)和密钥对。
在服务器的trustore中,我有一个自签名的客户端证书(client-cert)。
在客户端的密钥库中,我放置了一个自签名的客户端证书(client-cert)和适当的密钥对。
在客户端的信任库中,我放入了服务器证书。
注意:客户端和服务器应用程序都部署在同一Wildfly实例上。
注意:我注意到有两条ClientHello消息,这意味着在我致电服务时不知道为什么会有两个握手过程。
注意::我可以通过Soap-ui使用相同的客户端密钥对和证书来调用服务器。
这是我实现客户端SSLContext创建的方式:
TrustManagerFactory tmFactory = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore ts = KeyStore.getInstance("JKS");
ts.load(new FileInputStream(
System.getProperty("jboss.server.config.dir") + "/starfish_client.truststore"),
"password".toCharArray());
tmFactory.init(ts);
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(
System.getProperty("jboss.server.config.dir") + "/starfish_client.keystore"),
"password".toCharArray());
kmf.init(ks, "password".toCharArray());
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmFactory.getTrustManagers(), null);
prov.getRequestContext().put(JAXWS_SSL_SOCKET_FACTORY_PROPERTY, sslContext);
问题可能出在我使用自签名证书还是由于将两个应用程序都部署在同一台计算机上?