Heim >Java >javaLernprogramm >Warum erzeugt Java 1.7.0 eine SSL-Handshake-Warnung „unrecognized_name' und wie kann diese behoben werden?

Warum erzeugt Java 1.7.0 eine SSL-Handshake-Warnung „unrecognized_name' und wie kann diese behoben werden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-11 17:00:19403Durchsuche

Why Does Java 1.7.0 Produce an

SSL-Handshake-Warnung: Unrecognized_Name Error Resurfacing with Java 1.7.0 Upgrade

Nach dem Upgrade von Java 1.6 auf 1.7 können Benutzer auf einen Fehler stoßen SSL-Handshake-Warnung, gekennzeichnet durch die Fehlermeldung „unrecognized_name“. Dieses Problem tritt insbesondere beim Herstellen von SSL-Verbindungen zu einem Webserver auf.

Der Fehler ist auf die Einführung der SNI-Unterstützung (Server Name Indication) in Java 7 zurückzuführen, die standardmäßig aktiviert ist. Bestimmte falsch konfigurierte Server reagieren während des Handshakes mit einer Warnung „Unbekannter Name“, die von den meisten Clients ignoriert wird, nicht jedoch von Java.

Problemumgehungsoptionen:

Oracle-Ingenieure haben abgelehnt um dieses Problem anzugehen. Es stehen jedoch zwei Hauptproblemumgehungen zur Verfügung:

SNI deaktivieren:

  • Führen Sie die Anwendung mit dem Befehl aus: java -Djsse.enableSNIExtension=false yourClass
  • Legen Sie die Eigenschaft programmgesteuert fest: System.setProperty("jsse.enableSNIExtension", "false");

Beachten Sie, dass sich die Deaktivierung von SNI auf die gesamte Anwendung auswirkt.

Behandeln Sie falsch konfigurierte Server:

Für einen gezielteren Ansatz verwenden Sie Folgendes Schritte:

  1. Erstellen Sie einen SSLSocket mit dem Hostnamen.
  2. Versuchen Sie, den Handshake zu starten.
  3. Überprüfen Sie, ob ein „unrecognized_name“-Fehler vorliegt.
  4. Wenn ein Fehler auftritt, versuchen Sie erneut, einen SSLSocket ohne Hostnamen zu öffnen (wodurch effektiv deaktiviert wird). SNI).

Codebeispiel:

SSLSocketFactory factory = (SSLSocketFactory) SSLContext.getDefault().getSocketFactory();
SSLSocket sslsock = (SSLSocket) factory.createSocket(host, 443);
try {
  sslsock.startHandshake();
} catch (SSLException e) {
  if (e.getMessage().equals("handshake alert:  unrecognized_name")) {
    sslsock = (SSLSocket) factory.createSocket(host, 443);
    sslsock.startHandshake();
  } else {
    // Handle other errors
  }
}

Fazit:

Durch die Implementierung der beschriebenen Problemumgehungen Benutzer können den Fehler „unrecognized_name“ entschärfen, wenn sie Java 1.7.0 verwenden und mit falsch konfigurierten Servern interagieren und gleichzeitig die SNI-Funktionen beibehalten für andere Verbindungen.

Das obige ist der detaillierte Inhalt vonWarum erzeugt Java 1.7.0 eine SSL-Handshake-Warnung „unrecognized_name' und wie kann diese behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn