Database 错误的原因是什么;握手过程中远程主机关闭连接;?

Database 错误的原因是什么;握手过程中远程主机关闭连接;?,database,oracle,ssl,Database,Oracle,Ssl,我想用SSL连接到Oracle数据库11.2。但我收到的唯一错误是: 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.PhysicalCo

我想用SSL连接到Oracle数据库11.2。但我收到的唯一错误是:

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
我的sqlnet.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

证书没有密码。证书所在的对象具有密码。您的客户机知道密码,获取证书,然后将证书发送到服务器


如果服务器出于某种原因不喜欢证书,它可能会关闭连接,而不是继续握手。如果您不在请求时发送它,则情况相同,如果您的证书不满足服务器在证书请求中指定的约束,则会发生这种情况。例如,如果服务器无法识别自签名者。是否已将证书导出到服务器的信任存储?

证书没有密码。证书所在的对象具有密码。您的客户机知道密码,获取证书,然后将证书发送到服务器


如果服务器出于某种原因不喜欢证书,它可能会关闭连接,而不是继续握手。如果您不在请求时发送它,则情况相同,如果您的证书不满足服务器在证书请求中指定的约束,则会发生这种情况。例如,如果服务器无法识别自签名者。您是否已将证书导出到服务器的信任存储区?

我已找到解决方案。这很简单。首先,您需要设置自动登录。这将在wallet目录中创建一个文件cwallet.sso。最重要的是,当您启动TNS listener服务时,您已经关闭了wallet manager中的钱包。否则侦听器无法加载文件cwallet.sso。在跟踪文件中,您可以看到错误:

ntzlogin:Wallet open failed with error 28759

如果您稍后关闭钱包,则此操作无效。侦听器似乎只读取了一次文件。

我找到了解决方案。这很简单。首先,您需要设置自动登录。这将在wallet目录中创建一个文件cwallet.sso。最重要的是,当您启动TNS listener服务时,您已经关闭了wallet manager中的钱包。否则侦听器无法加载文件cwallet.sso。在跟踪文件中,您可以看到错误:

ntzlogin:Wallet open failed with error 28759

如果您稍后关闭钱包,则此操作无效。侦听器似乎只读取了一次文件。

客户端不知道证书,也不知道钱包的密码。你说的信任商店是什么意思?self-signet证书只存储在受密码保护的钱包中。@Horcrux7我不明白你的第一句话。服务器在其信任的证书签名者的某处有一个存储库。如果自签名者不在该存储库中,服务器将不信任它。如果证书是由CA签署的,您不会有问题,但是您选择了使用自签名证书,因此由您来让对等方信任它。如果你不知道这意味着什么,你最好付50美元,让一个公认的CA签名。啊哈,我有一件事,钱包是可信证书的存储。在MS SQL Server上只有一个存储。我存储在其中的所有证书都是可信的。@Horcrux7是的,但您是否已将所有可信证书存储在其中?这不一样。客户不知道证书,也不知道钱包的密码。你说的信任商店是什么意思?self-signet证书只存储在受密码保护的钱包中。@Horcrux7我不明白你的第一句话。服务器在其信任的证书签名者的某处有一个存储库。如果自签名者不在该存储库中,服务器将不信任它。如果证书是由CA签署的,您不会有问题,但是您选择了使用自签名证书,因此由您来让对等方信任它。如果你不知道这意味着什么,你最好付50美元,让一个公认的CA签名。啊哈,我有一件事,钱包是可信证书的存储。在MS SQL Server上只有一个存储。我存储在其中的所有证书都是可信的。@Horcrux7是的,但您是否已将所有可信证书存储在其中?这不是同一件事。Hi@Horcrux7,面对同样的问题,有同样的异常消息,但无法理解您的解决方案-“在启动TNS侦听器服务时在wallet manager中关闭钱包。”wallet manager指的是什么,您建议关闭哪个文件。我的服务器或客户端钱包证书都不会在任何编辑器中打开。请为我的情况提出一些解决方案。如果你没有打开钱包,那么你就没有同样的问题。如果TNS侦听器写入了一些错误,请查看跟踪文件。Hi@Horcrux7,面临相同的问题并显示相同的异常消息,但无法理解您的解决方案-“在启动TNS侦听器服务时关闭wallet manager中的钱包”。wallet manager指的是什么,建议关闭哪个文件。我的服务器或客户端钱包证书都不会在任何编辑器中打开。请为我的情况提出一些解决方案。如果你没有打开钱包,那么你就没有同样的问题。如果TNS侦听器写入了一些错误,请查看跟踪文件。