我生成使用OpenSSL一個CSR:相互SSL - 拿到鑰匙/在適當的格式信任庫
openssl req -out MyCompanyCsr.csr -new -newkey rsa:2048 -nodes -keyout MyCompanyPrivateKey.key
所以開始的時候,我們有:
- MyCompanyPrivateKey.key
- MyCompanyCsr.csr
然後,我把它交給我們的集成夥伴,誰迴應了3個文件:
- PartnerIntermediateCa.crt
- PartnerRootCa.crt
- MyCompanyCsr.crt
現在我需要使用相互SSL連接到他們的Web服務。爲此,我知道我需要在JAXB的SSLSocketFactory中設置truststore和keystore。
我使用實例化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());
但是,試圖在連接到服務器使用此代碼拋出與消息http.client.failed
一個SSLHandshakeException
:
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` fi LES。
假設Java代碼是合法的,我怎麼能確定我已經正確創建了keystore
和truststore
?
非常感謝。