[英]Java Open HttpsUrlConnection with pfx Certificate
我正在嘗試以編程方式連接到安全的Web服務器。 我擁有用於訪問服務器的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,但是它沒有幫助,我沒有主意。 任何幫助表示贊賞。
因此,事實證明,我只需要下載服務器證書並將其添加到cacert中,而不是使用pkcs12文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.