Was ist die Ursache der Fehlermeldung "Remote host closed connection während handshake"?
Möchte ich eine Verbindung zu der Oracle Datenbank 11.2 mit SSL. Aber die einzige Fehlermeldung die ich erhalte ist:
Exception in thread "main" java.sql.SQLException: I/O-Fehler: Remote host closed connection during handshake
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:465)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:534)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:217)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:28)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:527)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at TestOracle.testSSL(TestOracle.java:157)
at TestOracle.main(TestOracle.java:131)
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:808)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:623)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
at oracle.net.ns.Packet.send(Packet.java:420)
at oracle.net.ns.ConnectPacket.send(ConnectPacket.java:169)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:301)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1406)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:327)
... 8 more
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:333)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:789)
... 16 more
Muss ich hinzufügen, dass einem selbst signierten Zertifikat zu einem wallet erstellt. Aber ich verstehe nicht, wie der Oracle-server verwenden kann, weil es müssen ein Passwort, das den oracle-server nicht kennt. Muss ich sehen, das Passwort und wo muss ich es einstellen?
Auf dem Netzwerk kann ich sehen, dass die Oracle-server sendet keine bytes. Es schließen Sie die Buchse nach dem client starten Sie den händedruck. Ich denke, dass das problem auf der server-Seite.
Meine Zuhörer.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_2)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\Administrator\product\11.2.0\dbhome_2\bin\oraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora11.inetsoftware.local)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCPS)(HOST = ora11.inetsoftware.local)(PORT = 2484))
)
)
ADR_BASE_LISTENER = C:\app\Administrator
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=C:\app\Administrator\product\11.2.0\dbhome_2\BIN\owm\wallets\Administrator)))
SSL_CLIENT_AUTHENTICATION=FALSE
My SQL.ora:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=C:\app\Administrator\product\11.2.0\dbhome_2\BIN\owm\wallets\Administrator)))
SSL_CLIENT_AUTHENTICATION=FALSE
InformationsquelleAutor Horcrux7 | 2011-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Zertifikat nicht über ein Passwort. Die Sache ist das Zertifikat ein Kennwort hat. Dein client das Passwort kennt, bekommt das Zertifikat outcof das Ding, sendet das Zertifikat an den server.
Wenn der server nicht wie das Zertifikat aus irgendeinem Grund, kann dann die Verbindung schließen anstatt weiterhin den Handschlag. Gleiche, wenn Sie nicht senden es auf Anfrage, was geschehen würde, wenn Sie Ihr Zertifikat nicht erfüllen die constraints angegeben, die vom server im Zertifikat request. Zum Beispiel, wenn der server nicht erkennen das selbst-signer. Haben Sie exportiert das Zertifikat des Servers Vertrauen store?
Ich verstehe nicht, Ihren ersten Satz. Der server hat ein repository irgendwo Zertifikat Unterzeichner, denen er vertraut. Wenn die selbst-Unterzeichner nicht in das repository des Servers nicht als vertrauenswürdig ein. Wenn das Zertifikat wurde von einer ZERTIFIZIERUNGSSTELLE signiert, würden Sie nicht ein problem haben, aber Sie gewählt haben, verwenden Sie ein selbst signiertes Zertifikat, so ist es bis zu Ihnen zu Gleichaltrigen bekommen, ihm zu Vertrauen. Wenn Sie nicht wissen, was das bedeutet, Sie sind weit besser, zahlen, die fünfzig Dollar, und das erhalten Sie unterzeichnet von einer anerkannten CA.
Aha, ich habe etwas, was den Geldbeutel ist der Speicher für Vertrauenswürdige Zertifikate. Auf dem MS-SQL-Server-es ist nur ein Speicher. Alle Zertifikate, die ich Speichere, sind vertrauenswürdig.
ja, aber haben Sie gespeichert alle Vertrauenswürdige Zertifikate in es? Es ist nicht das gleiche.
InformationsquelleAutor user207421
Habe ich die Lösung gefunden. Es ist sehr einfach. Zuerst müssen Sie die Option " auto-login. Dies erstellt eine Datei cwallet.sso in der Brieftasche-Verzeichnis. Und das wichtigste ist, dass Sie geschlossen haben, um die Geldbörse, in der Brieftasche, die manager, wenn Sie starten Sie den TNS-listener-service. Sonst kann der Zuhörer nicht laden Sie die Datei cwallet.sso. In der trace-Datei können Sie sehen die Fehlermeldung:
Wenn Sie schließen die Brieftasche später, hat dies keine Auswirkung. Es sieht aus wie die listener Lesen Sie die Datei nur einmal.
Wenn Sie nicht geöffnet haben, die Brieftasche, dann haben Sie nicht das gleiche problem. Blick in die trace-Datei, wenn der TNS-listener schreiben einige Fehler.
InformationsquelleAutor Horcrux7