Я внедряю взаимную аутентификацию ssl в Wildfly 13, где я развернул серверное и клиентское приложение, взаимодействующее с использованием SOAP.
В хранилище ключей сервера (настроенного на уровне Wildfly) у меня есть самозаверяющий сертификат (сервер-сертификат) и пара ключей.
В праве сервера у меня есть самозаверяющий сертификат клиента (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);
Может ли быть проблема в том, что я использую самозаверяющие сертификаты или из-за развертывания обоих приложений на одном компьютере?