javax.net.ssl.SSLException: Unsupported record version Unknown-0.0
at sun.security.ssl.InputRecord.checkRecordVersion(InputRecord.java:552)
at sun.security.ssl.EngineInputRecord.bytesInCompletePacket(EngineInputRecord.java:113)
at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:862)
at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:775)
at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
at ncp.io.network.tls.TLSWrapper.unwrap(TLSWrapper.java:170)
at ncp.io.network.tls.TLSIO.decodeData(TLSIO.java:110)
at ncp.io.network.tls.TLSIO.handleRead(TLSIO.java:71)
at ncp.io.network.SocketThread.run(SocketThread.java:137)
下面是我的代码片段
@Override
public int handleRead(ByteBuffer temp) {
int read = opsManager.handleRead(temp);
if (read > 0) {
try {
tlsDecodeBuffer = decodeData(temp);
try {
temp.clear();
temp.put(tlsDecodeBuffer);
}catch (BufferOverflowException e){
temp = ByteBuffer.allocateDirect(tlsDecodeBuffer.remaining());
temp.put(tlsDecodeBuffer);
}
temp.flip();
temp.rewind();
if(tlsDecodeBuffer.hasRemaining())
tlsDecodeBuffer.compact();
else
tlsDecodeBuffer.clear();
}catch (SSLException e){
// Error occurs here:
e.printStackTrace();
log.warning("Insecure connection attempted/ SSL failure for:" + e.getMessage());
opsManager.close();
}
catch (IOException e) {
e.printStackTrace();
}
return read;
} else {
return -1;
}
}
private ByteBuffer decodeData(ByteBuffer input) throws IOException {
ncp.io.network.tls.TLSStatus stat = null;
boolean continueLoop = true;
do {
tlsDecodeBuffer = wrapper.unwrap(input, tlsDecodeBuffer);
switch (wrapper.getStatus()) {
case NEED_WRITE:
writeBuff(ByteBuffer.allocate(0));
break;
case UNDERFLOW:
if (tlsDecodeBuffer.capacity() == tlsDecodeBuffer.remaining()) {
throw new BufferUnderflowException();
} else {
input.compact();
continueLoop = false;
}
break;
case CLOSED:
if (log.isLoggable(Level.FINER)) {
log.finer("TLS Socket closed..." + toString());
}
throw new EOFException("Socket has been closed.");
default:
break;
}
stat = wrapper.getStatus();
} while (continueLoop && ((stat == TLSStatus.NEED_READ) || (stat == TLSStatus.OK))
&& input.hasRemaining());
if (continueLoop) {
if (input.hasRemaining()) {
input.rewind();
} else {
input.clear();
}
}
tlsDecodeBuffer.flip();
return tlsDecodeBuffer;
}
你的代码没有意义。
>
在unwrap()
中获得BufferOverflowException
时,需要通过Flip()/get()/Compact()清空目标缓冲区。
当您在wrap()
中获得bufferoverflowexception
时,您需要通过flip()/write()/compact()
清空目标缓冲区,其中write()
将进入网络。
在这两种情况下,分配一个新的缓冲区等都没有任何意义。
flip()
之后的rewind()
在任何上下文中都没有意义。
这里有很多关于如何正确使用SSLEngine
的帖子和答案。我建议你仔细读一读。
我发布了这个问题,我可以通过删除WebLogic startups参数来解决这个问题: 有人能解释一下吗?
下面的代码有时失败,有时工作。我使用的是Java8。是服务器端的问题吗? 线程“main”javax.net.ssl.sslException中的异常:不支持的记录版本未知-0.0。
在尝试访问AWS服务时,我收到以下证书错误。我在Jetty服务器上运行这个。 我用同样的设置创建了另一个hello world项目,它似乎工作正常? 为什么我突然得到了javax。网ssl。SSLexException:不支持的记录版本未知-0.0例外?
我试图连接到mysql与JDBC。我在Windows 10上生成的密钥如下: 我的JDBC代码如下所示: 我得到以下错误: 原因:javax。网ssl。SSLexException:sun上不支持的记录版本未知-0.0。安全ssl。InputRecord。在sun上检查RecordVersion(InputRecord.java:552)。安全ssl。InputRecord。sun上的readV3
问题内容: 我试图拨打https并收到以下错误:记录版本不受支持SSLv2Hello 谁能告诉我我在做什么错?谢谢你的帮助。 这是StackTrace: 这是工作示例: 问题答案: 弄清楚了。我在鞋带上绊倒的两个地方是: 需要在PoolingHttpClientConnectionManager中注册https 将TLSv1设置为SSLConnectionSocketFactory中唯一受支持的协