我試圖建立與https url的連接,但由於它仍在測試中,因此url重定向到測試環境,導致瀏覽器提示用戶發出一條消息,粗略地說明該證書是可信的,有效的,但與域名不匹配,並且如果他們想繼續。我很難在Java中處理這個問題。我發現的所有答案建議使用這樣的TrustManager在Java SSL連接中忽略「證書名稱錯誤」類型錯誤
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
return;
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
return;
}
}};
sslContext.init(kmf.getKeyManagers(), trustAllCerts, new SecureRandom());
但是這並沒有改變任何東西。
身份驗證涉及在讀取客戶端證書的私鑰時輸入密碼,並且這種身份驗證在瀏覽器和我的應用程序中的工作方式相同且正確,在此身份驗證之後,瀏覽器彈出或連接返回'bad_certificate'錯誤在我的應用程序中。是否有其他方法可以完全忽略域驗證或者使相同的提示出現?
爲了清楚起見,我的應用程序不會導致出現密碼提示,因爲我編寫了它或任何東西,我認爲它只是來自窗口檢測我的應用程序試圖訪問證書的私鑰,所以我會假設第二個提示會以類似的方式工作,但我還沒有找到任何參數來實現這一點。
這是一個有效的警告。然而,我已經低估了這個不作爲答案:有些情況下,Java代碼需要連接到合法的HTTPS URL,其中Java代碼(如任何好的瀏覽器)告訴用戶「證書中的名稱X不匹配主機名Y在URL中「,以及用戶想要建立連接的位置。 –