Я пытаюсь настроить веб-приложение Spring Boot для использования TLS при подключении к экземпляру MongoDB, работающему в контейнере Docker.
Я настроил экземпляр MongoDB в Docker использовать самозаверяющий сертификат и требовать 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
...
Я могу подключиться к экземпляру с TLS, используя строку подключения Mon go из командной строки, получая Mon go ракушка. Однако я не могу заставить свое веб-приложение подключаться к тому же экземпляру MongoDB через TLS.
Чтобы попытаться проверить соединение, я попытался создать модульный тест, который будет обращаться к БД. Магия Spring Boot c вызывает сбой теста во время настройки. Похоже, это потому, что автоматическое подключение некоторых зависимостей (я думаю, MongoTemplate), кажется, проверяет соединение, которое требует TLS, а затем завершается ошибкой.
Чтобы установить соединение TLS, я добавил сертификат сервера в Java хранилище доверенных сертификатов, используя keytool. Тем не менее, соединение по-прежнему не удается. Я попытался указать расположение файла .jks, созданного с помощью keytool, а также в файле application.yml, например:
...
javax:
net:
ssl:
trustStore: src/main/resources/truststore/trustedcerts.jks
...
В конечном счете, мой вопрос: как я могу настроить TLS- защищенные соединения с MongoDB из моего приложения Spring Boot? В настоящее время мы реализуем доступ к данным, используя MongoRepository и MongoTemplate.