Heim >Java >javaLernprogramm >Warum erhalte ich nach dem Upgrade auf Java 1.7 die SSL-Handshake-Warnung „unrecognized_name'?
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:
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.
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(); }
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!