简体   繁体   English

如何使用 4.4 版中的 MongoDB Java 驱动程序连接到使用 SSL 和密码验证的副本集?

[英]How do you use the MongoDB Java Driver in version 4.4 to connect to a replica set using SSL and password authentication?

How do you use the MongoDB Java Driver in version 4.4 to connect to a replica set using SSL and password authentication?如何使用 4.4 版中的 MongoDB Java 驱动程序连接到使用 SSL 和密码验证的副本集?

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).为了使用 SSL,您需要在密钥库中拥有 CA 证书和私钥(或者如果您更喜欢两个不同的密钥库)。 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.虽然您需要设置一些 Java 系统属性来声明您的密钥库以及如何访问它们,但所有其他参数都是通过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:下面有一个小示例,您可以使用 SSL 和基于密码的身份验证连接到 MongoDB 副本集:

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:这是 Maven 与 MongoDB 驱动程序的依赖关系:

<!-- 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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM