2012-05-08 65 views
0

你好,我越來越想使用SSLFactory連接到SSL在Java中,當這個錯誤如何解決無效的SSL記錄的內容類型

堆棧跟蹤:

javax.net.ssl.SSLHandshakeException: invalid SSL record content type 
at com.ibm.j9.jsse.SSLSocketImpl.completeHandshake(Unknown Source) 
at com.ibm.j9.jsse.SSLSocketImpl.getInputStream(Unknown Source) 

這裏的握手過程中的代碼錯誤:

_socket = SocketFactory.getSslSocket(_socket, //Socket created before this call 
             _address, //host that supports SSL 
             _port.intValue()); 

SSLSocket tempSocket = (SSLSocket)_socket; 

String[] supportedCipherSuites = tempSocket.getSupportedCipherSuites(); 

System.out.println("Supported Cipher Suites:"); 
for(int i = 0; i < supportedCipherSuites.length; i++) 
{ 
    System.out.println(supportedCipherSuites[i]); 
}  

tempSocket.setUseClientMode(true); 
tempSocket.startHandshake(); 
+0

請顯示您的代碼。 – home

+0

以及從服務器收到什麼數據的跟蹤。還有正在使用的證書的任何非敏感部分。 – Cheekysoft

+0

套件打印此: 支持的密碼: SSL_RSA_WITH_3DES_EDE_CBC_SHA SSL_RSA_WITH_DES_CBC_SHA SSL_RSA_EXPORT_WITH_DES40_CBC_SHA SSL_RSA_WITH_NULL_SHA SSL_RSA_WITH_NULL_MD5 TLS_RSA_WITH_AES_128_CBC_SHA –

回答

1

getSupportedCipherSuites()只顯示您本地SSL實施可以支持哪些密碼(不管它們是否啓用);它不使用遠程連接。因此,無論您的SSLSocket的目標是什麼,您的「調試」輸出總是會以相同的結果取得成功。除非嘗試握手(或者嘗試讀取或寫入流或強制訪問SSL會話信息而強制握手),否則遠程連接不會打開。

您確信您正在建立的出站TCP連接是SSL服務器嗎?您是否能夠使用其他客戶端(如瀏覽器或OpenSSL命令行客戶端)來確認此問題?

+0

是的,smtp服務器被配置爲僅使用SSL/TLS 我也試過使用OpenSSL命令並確認使用的服務器是使用ssl。 ** SSL握手已經讀取2687個字節並寫入305個字節** 在握手發生之前,我是否必須擔心證書? –

+0

即時消息現在使用smtp.gmail.com:587作爲我的smtp服務器,仍然發生錯誤... –

+0

有你的答案:smtp.gmail.com:587沒有運行SSL http://pastebin.com/jxEjAt1h – Cheekysoft

相關問題