虽然我可以使用 MongoDB Compass 连接到远程服务器上的 MongoDB 数据库,但当我尝试在 IntelliJ IDEA 中使用相同的 URI 进行连接时,出现以下错误:
... sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径
我查看并尝试了以下线程的解决方法,但没有一个起作用:
在使用以下命令之前我已经导入了必要的证书文件:
sudo /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/bin/keytool -importcert -file /<certificate_file_name>.pem
-keystore /Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home/lib/security/cacerts -alias "<certificate_alias>" -storepass changeit -noprompt
我还按照这个问题的建议,通过 IntelliJ IDEA 上的“工具”>“服务器证书”添加了此证书,并尝试通过传递一些指向该证书的 VM 选项来运行该应用程序,但仍然遇到相同的错误。该问题似乎与 IntelliJ 有关,因为我可以通过 Compass 使用相同的 URI 进行连接。还有什么需要我检查的吗?
假设“远程服务器上的 MongoDB 数据库”具有签名证书。
可能有 3 个或更多证书比您需要导入到密钥库中的证书多。
3个或更多证书共同构成证书认证链。
在此处阅读有关证书链的更多信息。
报告的错误信息:
Fatal (CERTIFICATE_UNKNOWN): PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
表示证书链已损坏。而且还缺一张证书。
在此页面中有一些提示/说明,使用openssl
或浏览器来识别丢失的证书。
您还可以使用 openssl 检查在线证书链。为了 例如,您可以使用以下命令来检查某项的详细信息 来自网站的证书:您还可以使用
echo | openssl s_client -servername hostname -connect host:port 2>/dev/null | openssl x509 -noout -text
将主机名替换为服务器名称,并将主机:端口替换为 您要检查的服务器的主机和端口号。您可以使用网络浏览器检查网站的证书链 开发人员工具或只需转到网络浏览器地址栏垫 锁定图标。以下是使用 Web Developer 在 Chrome 中执行此操作的方法 工具:
Visit the website. Open the Developer Tools (press F12). Click on the "Security" tab. Click on "View certificate".
这将向您显示网站的证书链。
openssl
命令从“远程服务器上的 MongoDB 数据库”接收所有必需的证书链列表:
openssl s_client -servername <hostname> -connect <host>:<port> 2>/dev/null
一旦拥有证书链:
pem
文件中。
keytool
命令行工具将
pem
文件插入密钥库。
这里和这里有很好的答案描述了提取过程。