Я сгенерировал CSR с помощью OpenSSL:
openssl req -out MyCompanyCsr.csr -new -newkey rsa:2048 -nodes -keyout MyCompanyPrivateKey.key
Итак, начнем с того, что имеем:
- MyCompanyPrivateKey.key
- MyCompanyCsr.csr
Затем я отправил его нашему партнеру по интеграции, который ответил тремя файлами:
- PartnerIntermediateCa.crt
- PartnerRootCa.crt
- MyCompanyCsr.crt
Теперь мне нужно подключиться к их веб-службе, используя взаимный SSL. Я знаю, что для этого мне нужно установить хранилище доверенных сертификатов и хранилище ключей в моем SSLSocketFactory для JAXB.
Я создаю хранилище ключей и хранилище доверенных сертификатов в Java, используя:
KeyStore trustStore = KeyStore.getInstance("JKS");
InputStream tsis = ClassLoader.getSystemResourceAsStream(trustStorePath);
trustStore.load(tsis, "mypassword".toCharArray());
tsis.close();
KeyStore keyStore = KeyStore.getInstance("JKS");
InputStream ksis = ClassLoader.getSystemResourceAsStream(keyStorePath);
keyStore.load(ksis, "mypassword".toCharArray());
if (ksis != null) {
ksis.close();
}
TrustManagerFactory tmf =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
KeyManagerFactory kmf =
KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, "mypassword".toCharArray());
Однако попытка использовать этот код для подключения к серверу выдает SSLHandshakeException
с сообщением http.client.failed
:
com.sun.xml.ws.client.ClientTransportException: HTTP transport error:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
keystore
и truststore
, которые я использую, были экспортированы из моего браузера, с закрытым ключом клиента в виде файлов PKCS
и сертификатом сервера в виде файлов x509 Cert PKCS#7 w/ Chain'. Then opened them up in Portecle and exported them both as
JKS`.
Предполагая, что код Java является законным, как я могу быть уверен, что правильно создал keystore
и truststore
?
Большое спасибо.