web-dev-qa-db-ja.com

ランダムにSSLExceptionサポートされていないレコードバージョン不明-0.0

以下のコードが失敗することもあれば、機能することもあります。私はJava8を使用しています。サーバー側の問題ですか?

スレッド「メイン」の例外javax.net.ssl.SSLException:サポートされていないレコードバージョン不明-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());
}
11

256ビット暗号化を適用するSSL接続を使用しようとすると、新しいJavaインストールで同じエラーメッセージが表示されました。問題を修正するには、Java Cryptography Extension(JCE)Unlimited Strength Jurisdiction Policy Files(eg http://www.Oracle.com/technetwork/Java/javase/downloads/jce-7-download-432124.html =)

8

私はこの行を持っていました

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

に変更する必要がありました

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

そして今、それは両方で動作します、Java 7とJava 8

注:(Java 7 SSLとTLSは両方とも同じURLで機能し、Java 8ではTLSv1を試したばかりですが、SSLv1も機能すると思います)

2
Peter Escamilla

スタックトレースによると、RecordVersion Unknow-0.0は ここ => ここから参照 => InputRecord.readV3Recordで呼び出されます から生成されます。

ほとんどの場合、これら2つの値は0であってはなりません。これが発生する理由は、ハンドシェイク中のサーバーからの誤った応答である可能性があります。

(これは答えではありませんが、問題と解決策を簡単に理解するための情報です)

0
Valen