以下のコードが失敗することもあれば、機能することもあります。私は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());
}
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 =)
私はこの行を持っていました
SSLContext sc = SSLContext.getInstance("SSL");
に変更する必要がありました
SSLContext sc = SSLContext.getInstance("TLSv1");
そして今、それは両方で動作します、Java 7とJava 8
注:(Java 7 SSLとTLSは両方とも同じURLで機能し、Java 8ではTLSv1を試したばかりですが、SSLv1も機能すると思います)
スタックトレースによると、RecordVersion Unknow-0.0は ここ => ここから参照 => InputRecord.readV3Recordで呼び出されます から生成されます。
ほとんどの場合、これら2つの値は0であってはなりません。これが発生する理由は、ハンドシェイク中のサーバーからの誤った応答である可能性があります。
(これは答えではありませんが、問題と解決策を簡単に理解するための情報です)