Я пишу 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();
}
}