Fehlermeldung
javax.net.ssl.SSLHandshakeException: (protocol_version) Received fatal alert: protocol_version
Auch ausgegeben als
- javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
JDK 21 und neuer geben den Namen des Alerts in Klammern mit aus. Wählt der Server stattdessen eine Version, die die JVM ablehnt, meldet Java „The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]“.
Java (JSSE) — TLS alert 70 received from the server
Was der Fehler bedeutet
Der Server hat die von der JVM angebotenen TLS-Versionen abgelehnt und mit dem Alert 70 (protocol_version) geantwortet. Aktuelle JDKs bieten nur TLS 1.3 und 1.2 an (1.0 und 1.1 stehen in jdk.tls.disabledAlgorithms), daher hat ein Server, der auf die alten Versionen beschränkt ist, keine gemeinsame Version mit ihnen.
Warum der Fehler auftritt
Der Server unterstützt nur TLS 1.0 oder 1.1
häufigLegacy-Appliances, alte IIS- oder Java-Server und eingebettete Geräte, die nie TLS 1.2 erhalten haben.
Der Client ist auf Versionen festgelegt, die der Server deaktiviert hat
gelegentlichAlte Startskripte setzen https.protocols oder jdk.tls.client.protocols für ein längst verschwundenes Legacy-System auf TLSv1; moderne Server lehnen das ab.
So behebst du den Fehler
- 1.
Versionen ermitteln, die der Server akzeptiert
Teste jede Version einzeln mit openssl s_client; bring dann die veraltete Seite auf den aktuellen Stand.
bash for v in tls1 tls1_1 tls1_2 tls1_3; do printf '%-7s ' "$v" echo | openssl s_client -connect legacy.example.com:443 -servername legacy.example.com -"$v" \ -cipher 'DEFAULT:@SECLEVEL=0' >/dev/null 2>&1 && echo accepted || echo refused done - 2.
Protokollfestlegungen im Client entfernen
Suche in Startskripten und JVM-Optionen nach https.protocols oder jdk.tls.client.protocols; lass TLSv1.3 und TLSv1.2 zu.
bash # Do not pin old versions on the client; let JSSE offer 1.3 and 1.2 grep -rn 'https.protocols\|jdk.tls.client.protocols' /etc/default/app* "$JAVA_HOME/conf" 2>/dev/null java -Djdk.tls.client.protocols=TLSv1.3,TLSv1.2 -jar app.jar - 3.
TLS 1.2 und 1.3 auf dem Server aktivieren
Die dauerhafte Lösung: Jeder gepflegte Client unterstützt beide Versionen.
text # Server side: enable TLS 1.2 and 1.3 ssl_protocols TLSv1.2 TLSv1.3;