How do you use the MongoDB Java Driver in version 4.4 to connect to a replica set using SSL and password authentication?
Can you show some examples?
How do you use the MongoDB Java Driver in version 4.4 to connect to a replica set using SSL and password authentication?
Can you show some examples?
In order to use SSL you will need to have a CA certificate and a private key in a keystore (or if you prefer on two distinct keystores).
Whilst you need to set some Java system properties to declare your keystores and how to access them, all other parameters are setup via the MongoClientSettings.Builder class.
Below you have a small example that you can use to connect to a MongoDB replica set using SSL with password based authentication:
public static MongoClient createMongoClient(MongoDBConnectionParameters parameters) {
MongoClientSettings.Builder builder = MongoClientSettings.builder();
if(parameters.getPassword() != null) {
// User name and password
MongoCredential mongoCredential = com.mongodb.MongoCredential.createCredential(parameters.getUser(),
parameters.getAuthDB(), parameters.getPassword().toCharArray());
builder.credential(mongoCredential);
}
if(parameters.getServerAddressList() != null) {
// using replica set
ArrayList<ServerAddress> serverAddresses = parameters.getServerAddressList().entrySet().stream()
.map(e -> new ServerAddress(e.getKey(), e.getValue())).collect(Collectors.toCollection(ArrayList::new));
builder.applyToClusterSettings(b -> b.hosts(serverAddresses));
} else {
String connectionString = String.format("mongodb://%s:%d/", parameters.getMongoServer(), parameters.getMongoPort());
builder.applyConnectionString(new ConnectionString(connectionString));
}
if(parameters.isTls()) {
// using SSL
builder.applyToSslSettings(b -> b.enabled(true));
setupSsl(parameters);
}
return MongoClients.create(builder.build());
}
private static void setupSsl(MongoDBConnectionParameters parameters) {
System.setProperty("javax.net.ssl.trustStore", parameters.getTrustStore().toString());
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
final String trustStorePassword = "thepassword";
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
System.setProperty("javax.net.ssl.keyStore", parameters.getKeystoreFile().toString());
System.setProperty("javax.net.ssl.keyStoreType", "JKS");
String keystorePassword = "thepassword";
System.setProperty("javax.net.ssl.keyStorePassword", keystorePassword);
}
This is the Maven dependency with the MongoDB driver:
<!-- https://mvnrepository.com/artifact/org.mongodb/mongodb-driver-sync -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.4.0</version>
</dependency>