Heim >Java >javaLernprogramm >Warum erhalte ich nach dem Upgrade auf Java 1.7 die SSL-Handshake-Warnung „unrecognized_name'?

Warum erhalte ich nach dem Upgrade auf Java 1.7 die SSL-Handshake-Warnung „unrecognized_name'?

DDD
DDDOriginal
2024-12-07 07:12:10760Durchsuche

Why Am I Getting an

SSL-Handshake-Warnung: Problem mit unbekanntem Namen nach dem Upgrade auf Java 1.7.0

Beim Upgrade von Java 1.6 auf 1.7 können Benutzer auf ein Problem stoßen SSLHandshake-Alarm mit der Fehlermeldung „unrecognized_name“ beim Aufbau einer SSL-Verbindung zu einem Webserver. Dieser Fehler ist hauptsächlich auf die Einführung der Server Name Indication (SNI)-Unterstützung durch Java 7 zurückzuführen, die standardmäßig aktiviert ist.

Um dieses Problem zu beheben, stehen mehrere Optionen zur Verfügung:

  • SNI deaktivieren:

Um SNI global zu deaktivieren, kann das folgende Befehlszeilenargument beim Ausführen von verwendet werden Anwendung:

-Djsse.enableSNIExtension=false

Alternativ kann die Eigenschaft programmgesteuert festgelegt werden, bevor SSL-Aktionen ausgeführt werden:

System.setProperty("jsse.enableSNIExtension", "false");

Das Deaktivieren von SNI kann jedoch Auswirkungen auf Anwendungen haben, die seine Funktionalität benötigen.

  • Unbekannten Namen behandeln Warnungen:

Ein anderer Ansatz besteht darin, die Warnung „unerkannter_Name“ eleganter zu behandeln. Folgende Schritte können durchgeführt werden:

// Create an SSLSocket with the desired hostname
SSLSocket sslsock = ...

// Attempt handshake
try {
    // This will block until the attempt succeeds or fails.
    sslsock.startHandshake();
} catch (SSLException e) {
    // Handle the exception here. If it contains the "unrecognized_name" message, disable SNI and retry.
}

// Disable SNI and retry handshake without hostname
if (e.getMessage().contains("unrecognized_name")) {
    sslsock = ... // Create an SSLSocket without specifying a hostname
    sslsock.startHandshake();
}
  • Nicht vertrauenswürdige Zertifikate zulassen:

Der bereitgestellte Code versucht, eine Verbindung zu einem Server mit einem nicht vertrauenswürdigen Zertifikat herzustellen Zertifikat. Um dies abzumildern, sollten Sie die Implementierung einer benutzerdefinierten Vertrauensverwaltung oder die Verwendung des integrierten Vertrauensmanagers in Betracht ziehen:

// Custom trust management (for untrusted certificates)
TrustManager[] trustAllCerts = ...

// Built-in trust manager
TrustManager[] trustManagers = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()).getTrustManagers();

Das obige ist der detaillierte Inhalt vonWarum erhalte ich nach dem Upgrade auf Java 1.7 die SSL-Handshake-Warnung „unrecognized_name'?. 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