gpt4 book ai didi

java - 无法使用 ssl 连接 mongodb,出现异常 com.mongodb.MongoSocketOpenException : Exception opening socket

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:16 24 4
gpt4 key购买 nike

尝试创建一个 java 客户端以连接到安全的 Mongodb 服务器(使用身份验证和自签名证书。)

失败并出现异常“com.mongodb.MongoSocketOpenException:异常打开套接字。”

我可以使用安装在我运行代码的同一台机器上的 robomongo 客户端,使用 auth 和 ssl 选项连接到服务器。

我还验证了 java 客户端在 mongodb 服务器中只有身份验证时工作正常,只有 ssl 才会失败。

我的代码如下所示:

String uri = "mongodb://<user>:<password>@<ip>:<port>/admin?ssl=true&sslInvalidHostNameAllowed=true";
MongoClientURI connectionString = new MongoClientURI(uri);
MongoClient mongoClient = new MongoClient(connectionString);
DB db = mongoClient.getDB(connectionString.getDatabase());

版本:

Mongo v3.4.5

Jdk 1.8

Mongo-java-驱动程序 3.2.2

完整堆栈跟踪:

com.mongodb.MongoSocketWriteException: Exception sending message
at com.mongodb.connection.InternalStreamConnection.translateWriteException(InternalStreamConnection.java:462)
at com.mongodb.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:205)
at com.mongodb.connection.CommandHelper.sendMessage(CommandHelper.java:89)
at com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:32)
at com.mongodb.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:83)
at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:43)
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115)
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:128)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source)
at sun.security.ssl.AppOutputStream.write(Unknown Source)
at com.mongodb.connection.SocketStream.write(SocketStream.java:75)
at com.mongodb.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:201)
... 7 more
Caused by: java.security.cert.CertificateException: No subject alternative names present
at sun.security.util.HostnameChecker.matchIP(Unknown Source)
at sun.security.util.HostnameChecker.match(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkIdentity(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkIdentity(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
... 17 more

最佳答案

这是证书的问题,您在 uri 中使用了 IP。尝试使用主机名或向证书添加替代名称。

这是另一种可能的解决方案:https://www.ibm.com/support/knowledgecenter/SS3NGB_5.1.0.3/ioc/ts_liberty_ip.html

关于java - 无法使用 ssl 连接 mongodb,出现异常 com.mongodb.MongoSocketOpenException : Exception opening socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44673599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com