52

以前にこのエラーに遭遇した人はいますか? 私は SSL を初めて使用します。ClientHello に明らかに問題があり、欠けているものはありますか? その例外は、ServerHello 応答なしでスローされます。アドバイスをいただければ幸いです。

*** ClientHello, TLSv1
RandomCookie:  GMT: 1351745496 bytes = { 154, 151, 225, 128, 127, 137, 198, 245, 160, 35, 124, 13, 135, 120, 33, 240, 82, 223, 56, 25, 207, 231, 231, 124, 103, 205, 66, 218 }
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 51 92   00 D8 9A 97 E1 80 7F 89  ...G..Q.........
0010: C6 F5 A0 23 7C 0D 87 78   21 F0 52 DF 38 19 CF E7  ...#...x!.R.8...
0020: E7 7C 67 CD 42 DA 00 00   20 00 04 00 05 00 2F 00  ..g.B... ...../.
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                 ...........
xxx, WRITE: TLSv1 Handshake, length = 75
[write] MD5 and SHA1 hashes:  len = 101
0000: 01 03 01 00 3C 00 00 00   20 00 00 04 01 00 80 00  ....<... .......
0010: 00 05 00 00 2F 00 00 33   00 00 32 00 00 0A 07 00  ..../..3..2.....
0020: C0 00 00 16 00 00 13 00   00 09 06 00 40 00 00 15  ............@...
0030: 00 00 12 00 00 03 02 00   80 00 00 08 00 00 14 00  ................
0040: 00 11 00 00 FF 51 92 00   D8 9A 97 E1 80 7F 89 C6  .....Q..........
0050: F5 A0 23 7C 0D 87 78 21   F0 52 DF 38 19 CF E7 E7  ..#...x!.R.8....
0060: 7C 67 CD 42 DA                                     .g.B.
xxx, WRITE: SSLv2 client hello message, length = 101
[Raw write]: length = 103
0000: 80 65 01 03 01 00 3C 00   00 00 20 00 00 04 01 00  .e....<... .....
0010: 80 00 00 05 00 00 2F 00   00 33 00 00 32 00 00 0A  ....../..3..2...
0020: 07 00 C0 00 00 16 00 00   13 00 00 09 06 00 40 00  ..............@.
0030: 00 15 00 00 12 00 00 03   02 00 80 00 00 08 00 00  ................
0040: 14 00 00 11 00 00 FF 51   92 00 D8 9A 97 E1 80 7F  .......Q........
0050: 89 C6 F5 A0 23 7C 0D 87   78 21 F0 52 DF 38 19 CF  ....#...x!.R.8..
0060: E7 E7 7C 67 CD 42 DA                               ...g.B.
[Raw read]: length = 5
0000: 15 03 01 00 02                                     .....
[Raw read]: length = 2
0000: 02 46                                              .F

{ http://xml.apache.org/axis/ }stackTrace:

javax.net.ssl.SSLException: Received fatal alert: protocol_version
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190)
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1806)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:986)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1170)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1197)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1181)
at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186)
at 

...

4

16 に答える 16

55

Java 1.8 では、デフォルトの TLS プロトコルは v1.2 です。Java 1.6 および 1.7 では、デフォルトは廃止された TLS1.0 です。URL が古い TLS1.0 を使用しているため (Your - You see のようにClientHello, TLSv1)、Java 1.8 でこのエラーが発生します。このエラーを解決するには Java 1.8 のオーバーライド デフォルトを使用する必要があります。

System.setProperty("https.protocols", "TLSv1");

詳細については、Oracle ブログ:Diagnosing TLS, SSL, and HTTPS を参照してください。

于 2015-11-03T08:36:58.017 に答える
5

これはプロトコル バージョンの不一致のようです。通常、この例外は、クライアントとサーバーで使用される SSL プロトコル バージョンが一致しない場合に発生します。クライアントは、サーバーでサポートされているプロトコル バージョンを使用する必要があります。

于 2013-05-14T11:20:50.263 に答える
2

これは、TLSv1 ハンドシェイクを送信した後、SSLv2 プロトコルを使用してメッセージを送信するためです。

xxx, WRITE: TLSv1 Handshake, length = 75
xxx, WRITE: SSLv2 client hello message, length = 101

これは、サーバーが TLSv1 プロトコルが使用されることを想定しており、接続を受け入れないことを意味します。使用するプロトコルを指定するか、関連するコードを投稿してみてください。

于 2013-05-14T11:21:11.687 に答える
1

JDK 1.8 への更新後にそのエラーが発生しました。しかし、JAVA_HOME変数はJDK 1.7にさらにハードコードされていました。Thew 修正は問題を解決しました:

set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_241
于 2020-02-26T05:38:41.217 に答える
0

私はjdk1.7.0_45でapache-tomcat-7.0.70を使用してます、ここやstackoverflowの他の場所のソリューションはどれもうまくいきませんでした。これはGoogleの検索で非常に高いので、うまくいけば誰かを助けるかもしれないので、このソリューションを共有するだけです

うまくいったのは、次の両方の手順を実行することです。

  1. tomcat/bin/setenv.sh に追加して、"export JAVA_OPTS="$JAVA_OPTS -Dhttps.protocols=TLSv1.2" で Tomcat を起動します (Windows では構文が若干異なります)。

  2. TLS1.2 プロトコルで必要な HttpClients またはその他のものを手動で構築/強制します。

    Context ctx = SSLContexts.custom().useProtocol("TLSv1.2").build();
    HttpClient httpClient = HttpClientBuilder.create().setSslcontext(ctx).build();
    HttpPost httppost = new HttpPost(scsTokenVerificationUrl);
    
    List<NameValuePair> paramsAccessToken = new ArrayList<NameValuePair>(2);
    paramsAccessToken.add(new BasicNameValuePair("token", token));
    paramsAccessToken.add(new BasicNameValuePair("client_id", scsClientId));
    paramsAccessToken.add(new BasicNameValuePair("secret", scsClientSecret));
    httppost.setEntity(new UrlEncodedFormEntity(paramsAccessToken, "utf-8"));
    
    //Execute and get the response.
    HttpResponse httpResponseAccessToken = httpClientAccessToken.execute(httppost);
    
    String responseJsonAccessToken = EntityUtils.toString(httpResponseAccessToken.getEntity());
    
于 2020-10-01T02:34:55.727 に答える