繁体   English   中英

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

[英]How do I configure a TLS client configuration from Spring Boot to MongoDB instance?

我正在尝试将 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 应用程序中设置系统属性

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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM