如何配置从Spring Boot到MongoDB实例的TLS客户端配置?

问题描述 投票:0回答:1

[我正在尝试将Spring Boot Web应用程序配置为在与运行在Docker容器中的MongoDB实例建立连接时使用TLS。

我已经在Docker中将MongoDB实例配置为使用自签名证书,并且需要TLS。 MongoDB的配置文件(mongod.conf)如下所示:

net:
  bindIp: 0.0.0.0
  port: 27017
  tls:
    certificateKeyFile: /home/mongodb/ssl/my-self-signed-cert.pem
    mode: requireTLS
    allowConnectionsWithoutCertificates: true
...

我可以从命令行使用Mongo连接字符串使用TLS连接到实例,获得Mongo shell。但是,我无法让我的Web应用程序通过TLS连接到相同的MongoDB实例。

为了尝试测试连接,我尝试创建将访问数据库的单元测试。 Spring Boot魔术会导致测试在设置过程中失败。似乎是因为某些依赖项中的自动装配(MongoTemplate,我认为)似乎在测试连接,该连接需要TLS然后失败。

[要建立TLS连接,我使用keytool将服务器的证书添加到Java信任库中。但是,连接仍然失败。我也尝试在application.yml文件中指定使用keytool创建的.jks文件的位置,如下所示:

...
javax:
  net:
    ssl:
      trustStore: src/main/resources/truststore/trustedcerts.jks
...

最终,我的问题是:如何从Spring Boot应用程序配置到MongoDB的TLS安全连接?当前,我们使用MongoRepository和MongoTemplate实现数据访问。

java mongodb spring-boot ssl tls1.2
1个回答
0
投票

您必须在Java应用程序中设置系统属性

System.setProperty ("javax.net.ssl.keyStore",keystorePath);
System.setProperty ("javax.net.ssl.keyStorePassword",keystorePass);
System.setProperty ("javax.net.ssl.trustStore",truststorePath);
System.setProperty ("javax.net.ssl.trustStorePassword","changeit");
© www.soinside.com 2019 - 2024. All rights reserved.