鍍金池/ 問答/Java  數(shù)據(jù)庫/ spring boot 連接mongodb報錯 Exc sending mess

spring boot 連接mongodb報錯 Exc sending message CertificateException

本地啟動項目報錯,
同樣的代碼配置,才別人那里沒有問題,
求解什么原因,

{"exception":"com.mongodb.MongoSocketWriteException: Exception sending
messagerntat
com.mongodb.connection.InternalStreamConnection.translateWriteException(InternalStreamConnection.java:516)rntat
com.mongodb.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:404)rntat
com.mongodb.connection.InternalStreamConnection.sendCommandMessage(InternalStreamConnection.java:269)rntat
com.mongodb.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:252)rntat
com.mongodb.connection.CommandHelper.sendAndReceive(CommandHelper.java:84)rntat
com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:34)rntat
com.mongodb.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:91)rntat
com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:51)rntat
com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:127)rntat
com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114)rntat
java.lang.Thread.run(Thread.java:745)rnCaused by:
javax.net.ssl.SSLHandshakeException:
java.security.cert.CertificateException: No subject alternative names
matching IP address 18.233.195.78 foundrntat
sun.security.ssl.Alerts.getSSLException(Alerts.java:192)rntat
sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)rntat
sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)rntat
sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)rntat
sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1506)rntat
sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)rntat
sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)rntat
sun.security.ssl.Handshaker.process_record(Handshaker.java:914)rntat
sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)rntat
sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)rntat
sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:747)rntat
sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)rntat
com.mongodb.connection.SocketStream.write(SocketStream.java:74)rntat
com.mongodb.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:401)rnt...
9 morernCaused by: java.security.cert.CertificateException: No
subject alternative names matching IP address 18.233.195.78
foundrntat
sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:167)rntat
sun.security.util.HostnameChecker.match(HostnameChecker.java:93)rntat
sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:455)rntat
sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:436)rntat
sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:200)rntat
sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)rntat
sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1488)rnt...
18
morern","thread_id":46,"level":"INFO","logger_name":"org.mongodb.driver.cluster","time":"2018-05-21T10:43:27.437+08:00","message":"Exception
in monitor thread while connecting to server
cluster0-shard-00-01-ta2km.mongodb.net:27017"}

代碼:

@SpringBootApplication(exclude = { SessionAutoConfiguration.class, DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class,MongoAutoConfiguration.class })
public class App {
    ...
}
 
@Component
public class MongoDBHelper {
 
    @Value("${mongoClient.uri}")
    private String mongoClientUri;
 
    @Value("${dbName}")
    private String databaseName;
 
    private static MongoClient mongoClient = null;
 
    public MongoDBHelper() {
    }
 
    @Bean
    public MongoClient getMongoClient() {
        if (mongoClient == null) {
            MongoClientURI uri = new MongoClientURI(mongoClientUri);
            mongoClient = new MongoClient(uri);
        }
        return mongoClient;
    }
 
    public MongoDatabase getMongoDataBase() {
        MongoDatabase database = getMongoClient().getDatabase(databaseName);
        return database;
    }
}
回答
編輯回答
遺莣

跟證書相關的問題。

  1. 先看看你們的服務端是否配置了證書;
  2. 看看是不是強制要求客戶端證書;
  3. 其次要看證書是不是自簽名的或是合法的第三方頒發(fā)的;

如果不清楚怎么看,最好問問你們配置MongoDB的人會比較清楚。

2018年2月19日 05:04