2017-01-13 56 views
0

我想以编程方式连接到安全的Web服务器。我有用于访问服务器并可以通过浏览器访问它的pfx证书。不过,我得到以下错误:Java打开HttpsUrlConnection与pfx证书

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(); 

我设法找到该错误解决方法通过将以下直接之前的openConnection电话:

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

只给我:

javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径建设失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求的目标的有效证书路径

我不能”不要为这个问题找到任何解决方案。我已经尝试导出证书并通过keytool将其添加到cacert,但它没有帮助,我也没有想法。任何帮助表示赞赏。

回答

0

所以事实证明,我只需要下载服务器证书,并将其添加到cacerts而不是使用pkcs12文件。