2017-01-13 10 views
0

プログラムで安全なWebサーバーに接続しようとしています。私はサーバーにアクセスするために使用されるpxx証明書を持っており、ブラウザー経由でアクセスできます。Java Open HttpsUrlConnection with pfx Certificate

java.security.cert.CertificateException:しかし、私は次のエラーを取得する

私が使用しています。このコードは現在ありませんサブジェクト代替名:

KeyStore keyStore = KeyStore.getInstance("PKCS12"); 
keyStore.load(new FileInputStream("path/to/pfxFile"), "mypassword"); 
KeyManagerFactory keyManagerFactory = KeyManagerFactory 
       .getInstance(KeyManagerFactory.getDefaultAlgorithm()); 
keyManagerFactory.init(keyStore, "mypassword"); 

KeyStore trustStore = KeyStore.getInstance("JKS"); 
trustStore.load(new FileInputStream("path/to/cacerts"), "changeit"); 
TrustManagerFactory trustManagerFactory = TrustManagerFactory 
       .getInstance(TrustManagerFactory.getDefaultAlgorithm()); 
trustManagerFactory.init(trustStore); 

SSLContext sslContext = SSLContext.getInstance("TLS"); 
sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), 
       new SecureRandom()); 

URL url = new URL("https://XXX.XXX.XXX.XXX/MyWebService"); 
connection = (HttpsURLConnection) url.openConnection(); 
connection.setSSLSocketFactory(sslContext.getSocketFactory()); 
connection.setRequestProperty("Content-Type", "text/xml"); 
connection.setRequestMethod("GET"); 
connection.setConnectTimeout(120000); 
connection.connect(); 

私はそのエラーの回避策を見つけることができました

HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals("XXX.XXX.XXX.XXX")); 

だけ私を与えるために:

をOpenConnectionメソッドの呼び出しは、直前に次のことを置くことにより、 210

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な証明書パスを見つけることができませんが、私は「couldn

この問題の解決策を見つけることはできません。私は証明書をエクスポートし、keytool経由でcacertに追加しようとしましたが、それは助けにならないので、私はアイデアがありません。どんな助けもありがとうございます。

答えて

0

だから、私はちょうどサーバーの証明書をダウンロードし、pkcs12ファイルを使用する代わりにそれをcacertsに追加する必要があることが判明しました。