簡體   English   中英

帶有pfx證書的Java Open HttpsUrlConnection

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM