web-dev-qa-db-ja.com

SSLハンドシェイクに失敗しました-Java 1.8

Java 1.8にアップグレードした後、多くの人が抱えていると思われる問題について人々に知らせるだけです。すべての解決策が同じというわけではないので、これをどのように解決したかを投稿します。

しかし、最初に...セキュリティが効果的にダウングレードされているため、これは本番システムに値するソリューションではありません。ただし、テストなどがブロックされている場合は、おそらく非常に適しています。

私の問題は、私が何をしたとしても... SSLv3などを有効にすることでした。私はいつも受け取っていました

"javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure".

これを「解決」するために私が取った手順は次のとおりです。

まず、サーバーが使用している暗号を発見しました。私はopensslを介してこれを行いました。

openssl s_client -Host yourproblemhost.com -port 443

これにより(最後に...)

SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : RC4-MD5

さて、その暗号を有効にするために「Java-wise」を何を使用しますか?

Oracleリンク

そのリンクには、名前とそのJava対応物があります。したがって、RC4-MD5の場合、SSL_RSA_WITH_RC4_128_MD5があります。

ようし。いいぞ。ここで、Systemプロパティを追加しました。

-Dhttps.cipherSuites=SSL_RSA_WITH_RC4_128_MD5

そして私のコードでは...

Security.setProperty("jdk.tls.disabledAlgorithms", "" /*disabledAlgorithms */ );

繰り返しますが..これは絶対的な最後の手段です '修正'...しかし、壁に頭をぶつけて走らせる場合(テスト)、私はそれが役立つことを願っています。

9
James

JDK 1.8.0_51リリース RC4はJavaクライアント(サーバーとしても)からSSLハンドシェイクをネゴシエートするためにサポートされなくなりました。RC4は弱い(そして侵害された)暗号と見なされます)それが削除の理由です

http://bugs.Java.com/view_bug.do?bug_id=8076221

ただし、RC4を_jdk.tls.disabledAlgorithms_からJavaセキュリティ構成から削除するか、setEnabledCipherSuites()メソッドを使用してプログラム的に有効にすることで有効にできます。

ただし、より適切な解決策は、サーバー構成を更新して(管理下にある場合)、より強力な暗号にアップグレードすることです。

RC4は、侵害された暗号と見なされるようになりました。 RC4暗号スイートは、OracleJSSE実装のクライアントとサーバーのデフォルトで有効な暗号スイートリストの両方から削除されました。これらの暗号スイートは、SSLEngine.setEnabledCipherSuites()およびSSLSocket.setEnabledCipherSuites()メソッドによって引き続き有効にできます。

Security.setProperty()を使用して設定するアプローチに関しては、 無効なアルゴリズムを保持するフィールドは静的で最終的 であるため、信頼できる方法ではありません。したがって、そのクラスが最初にロードされる場合は、それを制御することはできません。代わりに、プロパティファイルを作成して試すこともできます。

このような

_## override it to remove RC4, in disabledcipher.properties
jdk.tls.disabledAlgorithms=DHE
_

そして、JVMでは、このようなシステムプロパティとして参照できます。

_Java -Djava.security.properties=disabledcipher.properties blah...
_
5
Jigar Joshi

RC4は効果的にクラックされました- 14年前

2001年の論文「RC4の鍵スケジュールアルゴリズムの弱点」に掲載されたFluhrer、Mantin、Shamir(FMS)の攻撃は、弱点を利用しています。暗号化されたメッセージからキーを再構築するためのRC4キースケジューリングアルゴリズム。

問題はJava 8ではありません。

問題は、サーバーがRC4を使用していることです。

2
Andrew Henle

ここでの根本的な原因はサーバーであることに注意してください。サーバー(開発者の制御が及ばない可能性が非常に高い)が修正されるまでの回避策を提供するために、これを投稿しただけです。

0
James