首页 > 解决方案 > 仅为 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:无法找到请求目标的有效证书路径

有人知道如何解决这个问题吗?

标签: springspring-bootssl

解决方案


您不应更改全局属性以更改 SSL/TLS 设置。

而是创建您的自定义SSLContext并使用您信任的证书和密钥对其进行初始化。然后SSLSocketFactory从中生成并提供给MongoClientOptions.Buildervia socketFactory(SocketFactory socketFactory)

有关创建SSLSocketFactory这种方式的示例,请参阅此答案:https ://stackoverflow.com/a/15183924/150978


推荐阅读