繁体   English   中英

使用 java 连接 Atlas MongoDB 失败

[英]use java connect Atlas MongoDB failed

当我使用java驱动连接atlas mongodb db时,出现SSLHandshakeException,如何解决?

      final ConnectionString  uriString = new ConnectionString ("mongodb+srv://XXX:XXX@cluster0-ddtis.azure.mongodb.net/test?retryWrites=true&w=majority");  
      MongoClient mongoClient = MongoClients.create(settings);        
      MongoDatabase database = mongoClient.getDatabase("test");

      System.out.println("Connect to database successfully");  

      MongoCollection<Document> collection = database.getCollection("movie");

      String dbs = mongoClient.listDatabaseNames().first();
      System.out.println("dbs" + dbs);         

2019-10-01 00:03:23 INFO org.mongodb.driver.cluster:76] Exception in monitor thread while connecting to server cluster0-shard-00-02-ddtis.azure.mongodb.net:27017 com.mongodb. MongoSocketWriteException: Exception sending message at com.mongodb.internal.connection.InternalStreamConnection.translateWriteException(InternalStreamConnection.java:551) at com.mongodb.internal.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:433) at com.mongodb.internal. connection.InternalStreamConnection.sendCommandMessage(InternalStreamConnection.java:273) 在 com.Z685A5F7CC75B4796 F6C6E00CCD384F01Z.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:257) at com.mongodb.internal.connection.CommandHelper.sendAndReceive(CommandHelper.java:83) at com.mongodb.internal.connection.CommandHelper.executeCommand(CommandHelper. java:33) at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:105) at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:62) at com.Z685A5F7CC75B4796 F6C6E00CCD384F01Z.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:129) at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) at java.lang.Thread.run(Thread.java: 748)原因:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法在 sun.security 中找到请求目标的有效证书路径。 ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1959) at sun.security.ZF9D5C16A7F42203F8C195432354A3271 Z.Handshaker.fatalSE(Handshaker.java:302) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1514) at sun.security .ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1026) at sun.security.ssl.Handshaker.process_record(Handshaker.java:961) at sun. security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1072) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java: 1385) at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:757) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123) at com.mongodb.internal.connection.SocketStream.write(SocketStream .java:99) at com.mongodb.internal.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:430)... 9 common frames omitted Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security .provider.certpath.SunCertPathBuilderException:无法在 sun.security.validator.PKIXValidator.engin 的 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397) 处找到请求目标的有效认证路径 eValidate(PKIXValidator.java:302) at sun.security.validator.Validator.validate(Validator.java:260) at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) at sun.security.ssl.X509TrustManagerImpl .checkTrusted(X509TrustManagerImpl.java:229) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1496)... 18 common frames omitted原因:sun.security.provider.certpath.SunCertPathBuilderException:无法在 sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.Z93F725A07423FE1C889 F448B33D21F46Z:141) at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) at sun.security.validator.PKIXValidator.doBuild (PKIXValidator.java:392)

...省略了24个常用框架

原因可能是您的 jre/lib/security/ 文件夹的 cacerts 中不存在根证书问题,因此是 SSL 问题。 您能否尝试使用 keytool 保存和导入以下证书并进行测试:“ISRG Root X1: https://letsencrypt.org/certs/isrgrootx1.pem.txt (IdenTrust) DST Root CA X3: https://letsencrypt.org /certs/trustid-x3-root.pem.txt"

mongodb 手册提供上述证书链接以导入任何连接问题,这里是文档链接: https://docs.atlas.mongodb.com/hard-reference/tlsq

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM