spring - 仅为 mongodb 创建 ssl 连接
问题描述
我创建了一个 ssl mongodb 连接,如下所示
@Bean
public MongoClientOptions mongoClientOptions() {
System.setProperty("javax.net.ssl.trustStore","path");
System.setProperty("javax.net.ssl.trustStorePassword","password");
System.setProperty("javax.net.ssl.keyStore", "path");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
MongoClientOptions.Builder builder = MongoClientOptions.builder();
return builder.sslEnabled(true).sslInvalidHostNameAllowed(true).build();
}
但在那之后其他外部休息调用(例如 - 获取翻译 api google 的语言)失败并给出以下错误。
原因:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径
有人知道如何解决这个问题吗?
解决方案
您不应更改全局属性以更改 SSL/TLS 设置。
而是创建您的自定义SSLContext
并使用您信任的证书和密钥对其进行初始化。然后SSLSocketFactory
从中生成并提供给MongoClientOptions.Builder
via socketFactory(SocketFactory socketFactory)
。
有关创建SSLSocketFactory
这种方式的示例,请参阅此答案:https ://stackoverflow.com/a/15183924/150978
推荐阅读
- vue.js - 内存泄漏 vue axios
- linux - 来自各种 docker 映像的相同文件是否会在 k8s 节点中页面缓存一次?
- javascript - 在 .js 文件中正确包含 math.js 库
- php - PHP - 检查某些内容是否与字符串匹配
- python - mac os Catalina 10.15.2 内置python版
- haskell - Haskell - 实现集合的powerset函数
- python - Django + AWS:文件未同步到 S3
- android - Android 定期 ble 扫描
- c# - Discord.Net 依赖注入 - 运行命令时未找到依赖项
- python-3.x - np.where 遍历条件中的多个选项 - 长度必须匹配错误