Spring Boot MongoDB 连接问题

16

我的Spring Boot应用程序正在尝试连接到MongoDB数据库。配置已添加在application.yml文件中。昨天在本地完全正常运行的应用程序。

但是今天在本地主机上运行时,我收到以下错误:

2020-12-03 14:59:03.763[0;39m [32m INFO[0;39m [35m10692[0;39m [2m---[0;39m [2m[ngodb.net:27017][0;39m [36morg.mongodb.driver.cluster              [0;39m [2m:[0;39m Exception in monitor thread while connecting to server edugyanamcluster-shard-00-00.l4au7.mongodb.net:27017

com.mongodb.MongoSocketWriteException: Exception sending message
    at com.mongodb.internal.connection.InternalStreamConnection.translateWriteException(InternalStreamConnection.java:551) ~[mongodb-driver-core-3.11.2.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:433) ~[mongodb-driver-core-3.11.2.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.sendCommandMessage(InternalStreamConnection.java:273) ~[mongodb-driver-core-3.11.2.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:257) ~[mongodb-driver-core-3.11.2.jar:na]
    at com.mongodb.internal.connection.CommandHelper.sendAndReceive(CommandHelper.java:83) ~[mongodb-driver-core-3.11.2.jar:na]
    at com.mongodb.internal.connection.CommandHelper.executeCommand(CommandHelper.java:33) ~[mongodb-driver-core-3.11.2.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:105) ~[mongodb-driver-core-3.11.2.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:62) ~[mongodb-driver-core-3.11.2.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:129) ~[mongodb-driver-core-3.11.2.jar:na]
    at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) ~[mongodb-driver-core-3.11.2.jar:na]
    at java.base/java.lang.Thread.run(Thread.java:835) ~[na:na]
Caused by: javax.net.ssl.SSLHandshakeException: extension (5) should not be presented in certificate_request
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131) ~[na:na]
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) ~[na:na]
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:307) ~[na:na]
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:263) ~[na:na]
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:254) ~[na:na]
    at java.base/sun.security.ssl.SSLExtensions.<init>(SSLExtensions.java:90) ~[na:na]
    at java.base/sun.security.ssl.CertificateRequest$T13CertificateRequestMessage.<init>(CertificateRequest.java:818) ~[na:na]
    at java.base/sun.security.ssl.CertificateRequest$T13CertificateRequestConsumer.consume(CertificateRequest.java:922) ~[na:na]
    at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:392) ~[na:na]
    at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:443) ~[na:na]
    at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:421) ~[na:na]
    at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:177) ~[na:na]
    at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164) ~[na:na]
    at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1180) ~[na:na]
    at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1091) ~[na:na]
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:402) ~[na:na]
    at java.base/sun.security.ssl.SSLSocketImpl.ensureNegotiated(SSLSocketImpl.java:721) ~[na:na]
    at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:998) ~[na:na]
    at com.mongodb.internal.connection.SocketStream.write(SocketStream.java:99) ~[mongodb-driver-core-3.11.2.jar:na]
    at com.mongodb.internal.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:430) ~[mongodb-driver-core-3.11.2.jar:na]
    ... 9 common frames omitted

[2m2020-12-03 14:59:05.112[0;39m [33m WARN[0;39m [35m10692[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mJpaBaseConfiguration$JpaWebConfiguration[0;39m [2m:[0;39m spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
[2m2020-12-03 14:59:07.468[0;39m [32m INFO[0;39m [35m10692[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mpertySourcedRequestMappingHandlerMapping[0;39m [2m:[0;39m Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2ControllerWebMvc#getDocumentation(String, HttpServletRequest)]
[2m2020-12-03 14:59:07.822[0;39m [32m INFO[0;39m [35m10692[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36m.s.s.UserDetailsServiceAutoConfiguration[0;39m [2m:[0;39m

需要关于问题的建议吗?因为几个小时前代码还完全正常工作。


2
今天我们开始看到完全相同的问题。你的是来自Atlas吗? - Peike
1
是的,这个问题是从今天开始出现的。MongoDB实际上已经更新了他们的服务器,可能已经更新了他们的密码。解决方案是在JVM参数中将TLS版本更改为1.2。您可以在Eclipse中添加->项目->运行为->运行配置->参数->VM参数(添加->-Djdk.tls.client.protocols=TLSv1.2)。 - ekansh
7个回答

18

MongoDB已经更新了他们的服务器,可能已经更新了他们的密码。解决方案是在JVM参数中将TLS版本更改为1.2

如果使用Eclipse作为IDE,则可以添加 -> 项目 -> 运行配置 -> 参数 -> VM参数,在其中添加 ->

-Djdk.tls.client.protocols=TLSv1.2

14

我可以使用来自另一个问题的解决方案来解决此问题。 我在JVM参数中将TLS版本更改为1.2:

-Djdk.tls.client.protocols=TLSv1.2

谢谢。我在哪里可以添加JVM参数?你能指导一下吗? - ekansh
如果您能说明如何将该选项添加到Maven pom.xml文件,我将非常感激! - Scott Chow
这只是一个执行参数:java -Djdk.tls.client.protocols=TLSv1.2 -jar app.jar - Mou
感谢您挽救了这场危机,您应该因此得到报酬。我在想Mongo的人员是如何轻易地根据自己的方便而破坏事物的。 - Utsav Gupta
谢谢你提供的解决方案,它起作用了。有没有关于这个 bug 是什么原因以及我们需要使用这个解决方法到什么时候的信息? - zperee

5
除了降级到TLSV1.2之外,升级您的JDK也可以解决此问题。
对于JDK版本11.0.0-11.0.6,将JDK升级到已打补丁的版本即可,详情请参见JDK-8236039
对于JDK版本13.0.0-13.0.02,升级到13.0.03应该可以解决此问题,详情请参见JDK-8241515

更新从14.0.1到14.0.2对我也起作用了。 - Simon
我正在运行Amazon Corretto JDK 11.0.9.1+12-LTS版本,但仍然看到这个错误。 - Tom Swifty
第15个版本出现了相同的错误,但只有部分开发人员遇到了这个问题。非常令人沮丧。 - Tom Swifty

1
我曾经试过升级jdk,但最好也是最有效的解决方法是更改TLS版本。
在IDE中右键单击项目 运行为 -> 运行配置... 然后转到“参数”选项卡 在VM参数中添加以下内容: -Djdk.tls.client.protocols=TLSv1.2
现在运行应用程序,它应该可以正常工作。
您可以参考附加的图片以获得更多的清晰度。 插入图像描述 插入图像描述

1

我从JDK 11.0.7更新到11.0.10,现在它可以正常工作了。


1

我遇到了这个问题,首先通过在JVM中添加以下参数来解决:

-Djdk.tls.client.protocols=TLSv1.2

但后来,我将openjdk:12 docker镜像更改为最新的openjdk:11(LTS),问题就不再需要-D参数了 =)


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接