12

有时下面的代码会失败,有时它会起作用。我正在使用Java8。是服务器端的问题吗?

线程“主”javax.net.ssl.SSLException 中的异常:不支持的记录版本 Unknown-0.0。

编辑:我从 JDK8 降级到 JDK7 并且它可以工作。我发现唯一可行的解​​决方案。

public static void main(String[] args) throws Exception {
    URL u = new URL("https://c********.web.cddbp.net/webapi/xml/1.0/");
    HttpURLConnection connection = (HttpURLConnection) u.openConnection();
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setInstanceFollowRedirects(false);
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "text/plain");
    connection.setRequestProperty("charset", "utf-8");
    connection.setRequestProperty("Content-Length", "" + 140);
    connection.setUseCaches(false);
    DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
}
4

5 回答 5

9

尝试使用强制 256 位加密的 SSL 连接时,我在新的 java 安装中收到相同的错误消息。为了解决这个问题,我发现我需要安装 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files(例如http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124。 html )

于 2014-08-28T13:19:44.243 回答
2

我有这条线

    SSLContext sc = SSLContext.getInstance("SSL");

不得不将其更改为

    SSLContext sc = SSLContext.getInstance("TLSv1");

现在它适用于 java 7 和 java 8

注意:(在 java 7 中 SSL 和 TLS 都使用相同的 url,在 java 8 中只是尝试了 TLSv1,但我猜 SSLv1 也可以)

于 2015-05-13T14:16:17.430 回答
1

根据您的 JDK/JRE 版本下载 Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 并将其放在 lib/security 文件夹中

默认情况下,Java Cryptographic Extension 在访问函数和算法使用方面受到限制。我们需要使其不受限制。

于 2020-08-18T08:39:51.017 回答
0

根据堆栈跟踪,从此处生成 RecordVersion Unknow-0.0 = >从此处引用=>在 InputRecord.readV3Record 中调用

大多数情况下,这两个值不应该为 0,发生这种情况的原因可能是握手时服务器的错误响应。

(这不是一个答案,只是一些信息,以便更容易找出问题和解决方案)

于 2016-04-11T02:38:51.563 回答
0

这个错误在最新的jre中得到修复,只需升级jre的版本。此问题是由 SNI 引起的

于 2021-12-14T06:07:25.057 回答