随机SSLException不支持的记录版本Unknown-0.0

时间:2014-04-27 14:48:32

标签: java ssl gracenote sslexception

有时下面的代码会失败,有时它会起作用。我正在使用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());
}

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

我有这条线

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

必须将其更改为

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

现在它适用于java 7和java 8

注意:(在java 7 SSL和TLS都使用相同的url,在java 8中只试过TLSv1,但我猜SSLv1也有效)

答案 2 :(得分:1)

根据您的JDK / JRE版本下载Java密码学扩展(JCE)无限强度管辖权策略文件,并将其放在lib / security文件夹中

默认情况下,Java密码扩展在访问功能和算法使用方面受到限制。我们需要使其不受限制。

答案 3 :(得分:0)

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

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

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