web-dev-qa-db-ja.com

SSLHandshakeException:ハンドシェイク中にリモートホストが接続を閉じました

フォーラムはこの質問でいっぱいですが、解決策を見つけることができません。 WSを接続しようとしましたが、成功しません。何の効果もなくcacertsファイルを更新しようとしました。

ログは次のとおりです。

Allow unsafe renegotiation: false
Allow legacy hello messages: true
Is initial handshake: true
Is secure renegotiation: false
%% No cached client session
*** ClientHello, TLSv1
RandomCookie:  GMT: 1507108654 bytes = { 133, 135, 81, 148, 186, 186, 146, 23, 28, 240, 158, 152, 139, 167, 209, 225, 54, 253, 112, 118, 61, 112, 140, 214, 149, 198, 197, 219 }
Session ID:  {}
Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, TLS_EMPTY_RENEGOTIATION_INFO_SCSV]
Compression Methods:  { 0 }
***
[write] MD5 and SHA1 hashes:  len = 75
0000: 01 00 00 47 03 01 5A D5   A7 2E 85 87 51 94 BA BA  ...G..Z.....Q...
0010: 92 17 1C F0 9E 98 8B A7   D1 E1 36 FD 70 76 3D 70  ..........6.pv=p
0020: 8C D6 95 C6 C5 DB 00 00   20 00 04 00 05 00 2F 00  ........ ...../.
0030: 33 00 32 00 0A 00 16 00   13 00 09 00 15 00 12 00  3.2.............
0040: 03 00 08 00 14 00 11 00   FF 01 00                 ...........
http-8080-1, WRITE: TLSv1 Handshake, length = 75
[Raw write]: length = 80
0000: 16 03 01 00 4B 01 00 00   47 03 01 5A D5 A7 2E 85  ....K...G..Z....
0010: 87 51 94 BA BA 92 17 1C   F0 9E 98 8B A7 D1 E1 36  .Q.............6
0020: FD 70 76 3D 70 8C D6 95   C6 C5 DB 00 00 20 00 04  .pv=p........ ..
0030: 00 05 00 2F 00 33 00 32   00 0A 00 16 00 13 00 09  .../.3.2........
0040: 00 15 00 12 00 03 00 08   00 14 00 11 00 FF 01 00  ................
http-8080-1, received EOFException: error
http-8080-1, handling exception: javax.net.ssl.SSLHandshakeException: Remote Host closed connection during handshake
http-8080-1, SEND TLSv1 ALERT:  fatal, description = handshake_failure
http-8080-1, WRITE: TLSv1 Alert, length = 2
[Raw write]: length = 7
0000: 15 03 01 00 02 02 28                               ......(
http-8080-1, called closeSocket()
http-8080-1, called close()
http-8080-1, called closeInternal(true)

助けてくれてありがとう

4
Rydermark

おそらくサーバーがTLS 1.0を無効にしている(そして、シーケンスバイト4703 01に見られるようにTLS 1.0を話している) 5A)、または存在しないSNI拡張を待機しています。

Java 6については、6u111のみがTLS 1.0より優れたもの(TLS 1.1)を許可し、6u121はTLS 1.2を許可します。 参照 を参照してください。 TLSバージョン不寛容の問題、それでも不十分であり、システムプロパティのみが リリースノート で説明されているように、それを完全に有効にします。

TLS v1.2は、今回のリリースでTLSプロトコルオプションになりました。デフォルトでは、TLSv1.0はクライアントソケットのデフォルトの有効なプロトコルのままです。

このため、いくつかのシステムプロパティを試してみます。

  • -Djdk.tls.client.protocols="TLSv1.2"(前提条件:6u121/7u95)
  • -Dhttps.protocols="TLSv1.2"コードでHttpsURLConnectionを使用している場合

ClientHelloは正しくフォーマットされていますが、拡張子(特にSNI)が含まれていません。これが非常に短く見える理由です(bytes = 80)。 SNIはデフォルトで6u121から有効になっています(私が正しい場合)。私が見ている両方の原因は適切なJavaバージョンで解決する必要があります。

5
Eugène Adell