[我正在尝试将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");