2012-05-08 69 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

相关问题