Я пытаюсь подключить MongoDB с включенным SSL / TLS и самозаверяющими сертификатами.Я загрузил самоподписанный сертификат в свои локальные машины.Но получая исключение
SSL is enabled but the socket is not an instance of javax.net.ssl.SSLSocket
Ссылки: Подключение к MongoDb с помощью SSL из приложения JAVA
Проблема с приведенным ниже кодом, он принимает все сертификаты.Я хотел, чтобы он был ограничен самозаверяющим сертификатом, который является доверенным сертификатом jvm
public static void main(String args[]) throws Exception {
String JAVA_HOME="C:\\Program Files\\Java\\jre1.8.0_211";
System.setProperty ("javax.net.ssl.trustStore",JAVA_HOME + "\\lib\\security\\cacerts");
System.setProperty ("javax.net.ssl.trustStorePassword","yyyy");
System.setProperty ("javax.net.ssl.keyStore",JAVA_HOME + "\\lib\\security\\mongo.pkcs12");
System.setProperty ("javax.net.ssl.keyStorePassword","xxxx");
MongoClientURI connectionString;
String uri = "mongodb://ttt:rrr@1.1.1.1:17017/db?authMechanism=SCRAM-SHA-1";
MongoClientOptions.Builder optionsBuilder;
optionsBuilder = MongoClientOptions.builder()
.sslEnabled(true)
.sslInvalidHostNameAllowed(true)
.socketFactory(getSSF());
connectionString = new MongoClientURI(uri, optionsBuilder);
MongoClient m = new MongoClient(connectionString);
DB db = m.getDB( "db" );
DBCollection c = db.getCollection( "mongostudent");
System.out.println( c.findOne() );
}
private static SSLSocketFactory getSSF() throws NoSuchAlgorithmException, KeyManagementException{
SSLContext sslContext;
sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init((KeyManager[])null, new TrustManager[]{new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) {
System.out.println("Certificate:"+x509Certificates[0]);
}
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) {
System.out.println("Certificate:"+x509Certificates[0]);
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}}, new SecureRandom());
return sslContext.getSocketFactory();
}
}
Используемая команда Keytool:
keytool -import -trustcacerts -file C:/certificateauth.pem -keystore cacertskeystore.jks -storepass "xxxx"
поместил файл pkcs в папку безопасности
Мне нужно настроить его таким образом, чтобы он принимал только доверенные сертификаты.