我嘗試使用來自Java應用程序的HTTP訪問網站。由於應用程序在開發環境中運行,因此相應的證書不受信任。使用HTTPS(不可信證書)使用Java訪問網站時出現問題
當使用javax.net.ssl包時,我嘗試定義一個自定義的TrustManager實現,該實現允許將所有內容傳遞給SslContext的init方法的第二個參數,但這不起作用。
有沒有人做過類似的工作? 非常感謝您的幫助! Thierry
我嘗試使用來自Java應用程序的HTTP訪問網站。由於應用程序在開發環境中運行,因此相應的證書不受信任。使用HTTPS(不可信證書)使用Java訪問網站時出現問題
當使用javax.net.ssl包時,我嘗試定義一個自定義的TrustManager實現,該實現允許將所有內容傳遞給SslContext的init方法的第二個參數,但這不起作用。
有沒有人做過類似的工作? 非常感謝您的幫助! Thierry
如果您信任該證書,則應將其添加到您的應用程序服務器的信任庫中。實施不執行證書檢查的信任管理器是一個安全漏洞。
你好,非常感謝你的幫助。是的,我同意你的觀點!它只適用於開發環境... – 2011-05-03 17:04:00
這是很容易實現TrustManager
不驗證什麼(工作在客戶端和服務器端):
public class NoVerifyTM implements X509TrustManager
{
void checkClientTrusted(X509Certificate[] chain, String authType) {
/* Accept All */
}
void checkServerTrusted(X509Certificate[] chain, String authType) {
/* Accept All */
}
X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0]
}
}
要使用此TrustManager
:
SSLContext ctx = SSLContext.getDefault();
ctx.init(null, new TrustManager[] { new NoVerifyTM() }, null);
SSLSocketFactory sf = ctx.getSocketFactory();
請注意:(如@hanwg所說),這種信任管理器只能用於測試/原型設計。
你好,非常感謝你的回答。不幸的是,這並不能解決我的問題......事實上,我認爲還有更多事情要做。也許在關鍵經理層面? – 2011-05-03 17:03:20
你可以給我們一些你寫的代碼片段,或者你得到的例外嗎?這將是更容易幫助:) – Jcs 2011-05-03 17:05:37
任何示例代碼? – Manny 2011-05-02 08:04:37
您是否使用-Djavax.net.debug = all(或auth)來查看發生了什麼?你是如何使用新創建的上下文的?而且 - 當然 - 因爲證書應該是公開的,爲什麼不相信證書呢? – 2011-05-02 08:28:06
非常感謝您的回答!在使用調試提示時,我可以看到:SEND TLSv1 ALERT:fatal,description = certificate_unknow。事實上,我可以信任證書,因爲它是來自第三方公司的開發服務器。 – 2011-05-02 08:46:37