it-swarm.com.de

javax.net.ssl.SSLException: Schwerwiegender Alarm: Protokollversion

Hat jemand diesen Fehler schon einmal gesehen? Ich bin neu bei SSL. Gibt es etwas, was offensichtlich mit meinem ClientHello nicht stimmt? Diese Ausnahme wird ohne ServerHello-Antwort ausgelöst. Jeder Rat wird geschätzt.

*** 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  [email protected]
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  [email protected]
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 

...

18
Matthias

In Java 1.8 ist das Standard-TLS-Protokoll v1.2. In Java 1.6 und 1.7 wird TLS1.0 standardmäßig nicht mehr verwendet. Ich bekomme diesen Fehler in Java 1.8, weil URL alte TLS1.0 verwendet (wie Your - Sie sehen ClientHello, TLSv1). So beheben Sie diesen Fehler Sie müssen Standardeinstellungen für Java 1.8 überschreiben.

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

Weitere Informationen im Oracle-Blog .

27
marioosh

die Antwort von Marioosh scheint auf dem richtigen Weg zu sein. Es hat für mich nicht funktioniert .. Also habe ich gefunden:

Probleme beim Verbindungsaufbau über HTTPS/SSL über eigenen Java-Client

welche verwendet:

Java.lang.System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");

Was mit Java 7 und einer TLSv1.2-Site notwendig erscheint. 

Ich habe die Seite überprüft mit:

openssl s_client -connect www.st.nmfs.noaa.gov:443

mit

openssl version
OpenSSL 1.0.2l  25 May 2017

und bekam das Ergebnis:

...
SSL-Session:
   Protocol  : TLSv1.2
   Cipher    : ECDHE-RSA-AES256-GCM-SHA384
...

Bitte beachten Sie, dass eine ältere openssl-Version auf meinem Mac nicht funktioniert hat und ich die Macports-Version verwenden musste.

7
Wolfgang Fahl

Ich habe dieses Problem beim Installieren eines PySpark-Pakets festgestellt. Ich bin um das Problem herumgekommen, indem ich die TLS-Version mit einer Umgebungsvariablen geändert habe:

echo 'export Java_TOOL_OPTIONS="-Dhttps.protocols=TLSv1.2"' >> ~/.bashrc
source ~/.bashrc
4
devinbost

Dies scheint eine Abweichung der Protokollversion zu sein. Diese Ausnahme tritt normalerweise auf, wenn die vom Client verwendete SSL-Protokollversion und der Server nicht übereinstimmen. Ihre Clients sollten eine vom Server unterstützte Proctocol-Version verwenden.

4
CloudyMarble

Ich habe die gleiche Fehlermeldung erhalten ..__ Für Java Version 7 funktioniert Folgendes für mich.

Java.lang.System.setProperty ("https.protocols", "TLSv1.2");

2
Urja Ramanandi

Ich bin mir nicht sicher, ob Sie eine Antwort gefunden haben, aber ich hatte dieses Problem und musste die TLS-Version auf 1.2 aktualisieren

private HttpsURLConnection getSSlConnection(String url, String username, String password){
    SSLContext sc = SSLContext.getInstance("TLSv1.2")
    // Create a trust manager that accepts all SSL sites
    TrustManager[] trustAllCerts = new TrustManager[1]
    def tm = new X509TrustManager(){
        @Override
        public void checkClientTrusted(X509Certificate[] certs, String authType) {
        }

        @Override
        public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
        }

        @Override
        X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0]
        }
    }
    trustAllCerts[0] = tm

    sc.init(null, trustAllCerts, new SecureRandom())
    HttpsURLConnection connection = (HttpsURLConnection) getConnection(url, username, password)
    connection.setSSLSocketFactory(sc.getSocketFactory())
    return connection
}
1
GarethReid

Dies ist darauf zurückzuführen, dass Sie einen TLSv1-Handshake senden, dann jedoch eine Nachricht mit dem SSLv2-Protokoll senden.

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

Dies bedeutet, dass der Server erwartet, dass das TLSv1-Protokoll verwendet wird, und akzeptiert die Verbindung nicht. Geben Sie an, welches Protokoll verwendet werden soll, oder veröffentlichen Sie den entsprechenden Code, damit wir einen Blick darauf werfen können

1
John Snow

Sie können es versuchen, indem Sie nach dem letzten Eintrag von Java_OPTS folgende Zeile zu catalina.bat hinzufügen

set Java_OPTS =% Java_OPTS% -Dhttps.protocols = TLSv1.2 -Djdk.tls.client.protocols = TLSv1.2

0
mk-baku