【问题标题】:Randomly SSLException Unsupported record version Unknown-0.0随机 SSLException 不支持的记录版本 Unknown-0.0
【发布时间】:2014-06-13 00:55:24
【问题描述】:

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

线程“main”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());
}

【问题讨论】:

  • 我无法重现,但没有JDK8。很高兴它在 JDK7 中工作。
  • 是的,这个问题经常发生在JDK8,而不是JDK7。

标签: java ssl gracenote sslexception


【解决方案1】:

在尝试使用强制 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

【讨论】:

  • 提供一种可能对某些人有所帮助的补救措施是公平的,但这并没有详细解释究竟是什么导致了他的错误的随机性。我在生产环境中应用最新的 JDK 和 JCE 时遇到了这个确切的问题,所以我不认为这是一个解决方案。
【解决方案2】:

我有这条线

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

不得不改成

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

现在它适用于 java 7 和 java 8

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 那么,我们通过添加这些文件来使其不受限制?
    • 是的,@ssavva05 ,如果错误仍然存​​在,则从当前版本继续进行 jre 升级或降级
    【解决方案4】:

    根据堆栈跟踪,RecordVersion Unknow-0.0 是从here 生成的 => referenced from here => which is invoked in InputRecord.readV3Record

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2018-08-03
        • 2016-05-16
        • 2017-04-16
        • 2014-10-29
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 2015-08-05
        • 1970-01-01
        相关资源
        最近更新 更多