首页 > 解决方案 > 如何在 Scala 中使用 SSL 连接到 MongoDB?

问题描述

我正在尝试建立与我在机器上的容器中运行并继续运行的 mongodb 实例的 ssl 连接,

nioEventLoopGroup-2-4, fatal error: 46: General SSLEngine problem
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

我为mongo创建了一个自签名的.pem,

openssl req -x509 -newkey rsa:4096 -keyout mongo.key -out mongo.crt -days 365 -nodes
cat mongo.key mongo.cert > mongo.pem

将它们移动到一个文件夹中,将其作为绑定卷安装在我的容器中并添加

--sslMode requireSSL --sslPEMKeyFile /etc/boundfolder/mongo.pem

到 mongo 启动。我可以用 mongo 客户端连接到这个。

我正在像这样在scala中设置我的mongo客户端,

val hostConf = ClusterSettings.builder().hosts(List(new ServerAddress(hostName)).asJava).build()
val clientSettings = MongoClientSettings.builder()
    .streamFactoryFactory(NettyStreamFactoryFactory())
    .clusterSettings(hostConf)
val withTLS = clientSettings.sslSettings(
    SslSettings.builder()
        .enabled(true)
        .invalidHostNameAllowed(true)
        .build())
MongoClient(withTLS.build())

最后,我创建了一个密钥库,

keytool -importcert -trustcacerts -file mongo.crt -keystore mongo.keystore

并使用以下参数启动应用程序,

-Djavax.net.ssl.keyStore=/path/to/mongo.keystore -Djavax.net.ssl.keyStorePassword=changeit -Djavax.net.debug=SSL

我很确定问题是我将自签名证书添加到密钥库中的内容或方式。谢谢你提供的所有帮助。

标签: mongodbscalassl

解决方案


推荐阅读