Добавьте sslInvalidHostNameAllowed = true для SpringBoot и Mongodb - PullRequest
0 голосов
/ 28 января 2019

Я пишу REST API с загрузкой Sping 2.1.2 и mongodb.У меня есть экземпляр создания MongoDB на Bluemix.Это устройство использует SSL с параметром -sslAllowInvalidCertificates

Я могу подключиться к нему с помощью программного обеспечения, такого как NAVICAT, просто скопируйте и вставьте строковое соединение, и все готово, вот мои свойства приложения сстрока URI:

spring.data.mongodb.uri=mongodb://admin:password@site1.composedb.com:19580,site2.composedb.com:19580/dbname?authSource=admin&ssl=true

Когда я пытаюсь запустить приложение, приложение springboot не работает, потому что я думаю, что для него требуется сертификат, которого у меня нет, и я не хочу:

Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Я не знаю, как и где установить клиентскую опцию sslInvalidHostNameAllowed (true) в моем приложении для Springboot.

спасибо

ОБНОВЛЕНИЕ - РЕШЕНО

Мне удалось исправить это, расширяя AbstractMongoConfiguration и переопределяя mongoClient () метод, подобный этому:

@Override
public MongoClient mongoClient() {
    try {
        SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
            @Override
            public boolean isTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws CertificateException {
                return true;
            }
        }).build();

        MongoClientOptions.Builder builder = new MongoClientOptions.Builder().sslEnabled(true).sslInvalidHostNameAllowed(true).sslContext(sslContext);
        MongoClientURI connectionString = new MongoClientURI("mongodb:Strign connection", builder);
        return new MongoClient(connectionString);

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...