Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encryption SSLException:不支持的记录版本未知-84.84_Encryption_Ssl_Java - Fatal编程技术网

Encryption SSLException:不支持的记录版本未知-84.84

Encryption SSLException:不支持的记录版本未知-84.84,encryption,ssl,java,Encryption,Ssl,Java,我在我们的服务器上遇到了一个奇怪的问题,这个问题时断时续地发生,不太经常(一个月一次),而且无法解决 我搜索了这个,发现它和我的问题非常相似。然而,前面的问题是关于Unknown-0.0,而我的错误显示为Unknown-84.84。另外,尽管我找不到84.84的含义。检查一下,我可以得出84.84是major.minor版本,但找不到84版本代表什么(顺便说一句,我使用的是Oracle jdk,所以我不确定它是否是同一个代码) 我们通过此连接工厂在客户机上使用TLSv1: SSLConnecti

我在我们的服务器上遇到了一个奇怪的问题,这个问题时断时续地发生,不太经常(一个月一次),而且无法解决

我搜索了这个,发现它和我的问题非常相似。然而,前面的问题是关于
Unknown-0.0
,而我的错误显示为
Unknown-84.84
。另外,尽管我找不到
84.84
的含义。检查一下,我可以得出
84.84
major.minor
版本,但找不到
84
版本代表什么(顺便说一句,我使用的是Oracle jdk,所以我不确定它是否是同一个代码)

我们通过此连接工厂在客户机上使用
TLSv1

SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                                            sslcontext,
                                            new String[] { "TLSv1" },
                                            null,
                                            SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER
                                        );
我想知道是否有人知道我的错误是什么,或者给我一些关于这方面的见解

如果出现以下情况,则java堆栈跟踪:

javax.net.ssl.SSLException: Unsupported record version Unknown-84.84
at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:524)
at sun.security.ssl.InputRecord.read(InputRecord.java:509)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:136)
at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:152)
at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:270)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:140)
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:57)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:260)

如果
Unknown-84.84
提到TCP数据报的前两个字节,我不会感到非常惊讶-前两个字节表示正在使用,其中SSLv3是0x0300,TLSv1是0x0301,等等。当非TLS的东西被推下管道时,它会取下前两个字节,然后说“嘿!我知道这不是TLS版本!它是0x8484或“它是0x5454!”!“。如果可能的话,我建议捕获数据包,看看到底发生了什么(握手是未加密的,可以研究)。@gwowenfahr版本是第二和第三字节(对于TLS和SSLv3格式),是十进制的,所以84.84是0x54 0x54。在ASCII中是“TT”“,FWTW。我同意捕捉应该会有所帮助,若和听起来的良好连接相比,错误的次数很少,那个么它应该和错误的次数相匹配。