2012-03-17 90 views
1

我正在使用Netty進行異步http(s)請求。當請求的URL爲https我加入這管道:Java SSL連接和UNKNOWN SERVER CERTIFICATE警告

SSLEngine engine = SecureChatSslContextFactory.getClientContext().createSSLEngine(); 
engine.setUseClientMode(true); 

pipeline.addLast("ssl", new SslHandler(engine)); 

這種運作良好,我得到響應回來的一切,但警告被寫入到輸出說:未知的服務器證書,例如,如果我發出一個請求:https://www.google.com這是我得到:

UNKNOWN SERVER CERTIFICATE: CN=www.google.com, O=Google Inc, L=Mountain View, ST=California, C=US 

因爲一切都還在工作這不是個大問題,我,但有兩件事我想知道:

  1. 爲什麼我得到那個警告?谷歌的證書是一個「衆所周知」的,瀏覽器似乎沒有警告。我應該以某種方式告訴ssl引擎在哪裏尋找證書?

  2. 我可以以某種方式在運行時捕獲此警告,而不是打印出此消息嗎?

謝謝。

回答

1

檢查以確保在您執行此操作時「信任存儲」已正確識別爲Netty,您可能必須查看是否將$ {JAVA_HOME}/jre/lib/security/cacerts添加爲可信存儲。

如果不是配置你可能無法通過SSL連接

+0

看起來我需要實現* TrustManagerFactorySpi *和* TrustManager *,因爲* SecureChat *示例提供的是「僞造」。它接受任何證書並打印警告而不檢查。我會堅持這一點,稍後再回來。 – 2012-03-17 15:16:14

+0

你可以繼承和重寫打印警告的方法,只是複製代碼無警告? – 2012-03-17 15:35:59

+0

是的,它的打印是在* X509TrustManager *的實現中實現的,我可以自己實現,但我不知道如何去做,我想我會稍後再介紹它。 – 2012-03-17 15:38:48