代码之家  ›  专栏  ›  技术社区  ›  Ankur Soni

如何使用java连接到启用SSL和Auth的MongoDB

  •  0
  • Ankur Soni  · 技术社区  · 8 年前

    问题 :

    卡菲尔.pem ,PEM证书 mongodb.pem公司

    脚本:

    我正在使用 mongo-java-driver-3.4.3.jar 启用SSL,启用身份验证 MongoDB 3.7.9版本 有3个实例的分片集群。下面是我试图连接到这个服务器的java代码。

    import java.util.ArrayList;
    import java.util.List;
    
    import org.bson.Document;
    
    import com.mongodb.MongoClient;
    import com.mongodb.MongoClientOptions;
    import com.mongodb.MongoCredential;
    import com.mongodb.ReadPreference;
    import com.mongodb.ServerAddress;
    import com.mongodb.client.MongoCollection;
    import com.mongodb.client.MongoDatabase;
    
    public class Starter {
    
        public static void main(String[] args){
    
            List<MongoCredential> mongoCredentials = new ArrayList<MongoCredential>();
            mongoCredentials.add(MongoCredential.
            createScramSha1Credential("admin", "admin", "admin".toCharArray()));
    
            List<ServerAddress> serverAddressArray = new ArrayList<ServerAddress>();
    
            serverAddressArray.add(new ServerAddress("xyz.domain.com", 27017));
    
            MongoClientOptions options = new MongoClientOptions.Builder()
                                            .sslInvalidHostNameAllowed(false)
                                            .sslEnabled(true)
                                            .readPreference(ReadPreference.primaryPreferred())
                                            .build();
            MongoClient mongoClient = new MongoClient(serverAddressArray, mongoCredentials, options);
            try {
                System.out.println("----- Step 1 ------");
                MongoDatabase db = mongoClient.getDatabase("CIM");
                System.out.println("----- Step 2 ------");
                MongoCollection<Document> collection = db.getCollection("orders");
                System.out.println("No of Documents in orders collection: " + collection.count());
              } catch (Exception ex) {
                  System.out.println(ex.getMessage());
              }
        }       
    }
    

    ----- Step 1 ------
    ----- Step 2 ------
    Sep 20, 2018 2:48:02 PM com.mongodb.diagnostics.logging.JULLogger log
    INFO: No server chosen by ReadPreferenceServerSelector{readPreference=ReadPreference{name=primaryPreferred}} from cluster description ClusterDescription{type=UNKNOWN, connectionMode=MULTIPLE, serverDescriptions=[ServerDescription{address=torvm-core16.sigma-systems.com:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out
    Sep 20, 2018 2:48:03 PM com.mongodb.diagnostics.logging.JULLogger log
    INFO: Exception in monitor thread while connecting to server xyz.domain.com:27017
    com.mongodb.MongoSocketReadException: Prematurely reached end of stream
        at com.mongodb.connection.SocketStream.read(SocketStream.java:88)
        at com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:494)
        at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:224)
        at com.mongodb.connection.CommandHelper.receiveReply(CommandHelper.java:134)
        at com.mongodb.connection.CommandHelper.receiveCommandResult(CommandHelper.java:121)
        at com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:32)
        .............
    

    无论如何,我能够连接MongoServer如下配置在RoboMongo3T。

    enter image description here

    Bag Attributes
        localKeyID: AA 4A 8D C5 AC CE 7A 08 F6 F1 00 2C 78 20 8D 0C 51 DE 66 F5 
    subject=/OU=Domain Control Validated/CN=*.xyz.com
    issuer=/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
    -----BEGIN CERTIFICATE-----
    MIIFPzCCBCegAwIBAgIJAKpTjrMr7rpZMA0GCSqGSIb3DQEBCwUAMIG0MQswCQYD
    .
    .
    .
    -----END CERTIFICATE-----
    Bag Attributes: <No Attributes>
    subject=/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
    issuer=/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
    -----BEGIN CERTIFICATE-----
    MIIFPzCCBCegAwIBAgIJAKpTjrMr7rpZMA0GCSqGSIb3DQEBCwUAMIG0MQswCQYD
    .
    .
    .
    -----END CERTIFICATE-----
    Bag Attributes
        localKeyID: AA 4A 8D C5 AC CE 7A 08 F6 F1 00 2C 78 20 8D 0C 51 DE 66 F5 
    Key Attributes: <No Attributes>
    -----BEGIN PRIVATE KEY-----
    MIIFPzCCBCegAwIBAgIJAKpTjrMr7rpZMA0GCSqGSIb3DQEBCwUAMIG0MQswCQYD
    .
    .
    .
    -----END PRIVATE KEY-----
    

    卡菲尔.pem

    -----BEGIN CERTIFICATE-----
    MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
    .
    .
    .
    .
    .
    
    -----END CERTIFICATE-----
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Ankur Soni    8 年前
    1. 我首先创造了一个 蒙哥达.pkcs12 文件使用命令 openssl pkcs12 -export -out mongodb.pkcs12 -in mongodb.pem .
    2. 我必须将此文件包含在 密钥库 和 托管库 在下面的代码中( 注意 :我的代码也已更改并最小化)。

      import org.bson.Document;
      
      import com.mongodb.MongoClient;
      import com.mongodb.MongoClientURI;
      import com.mongodb.client.MongoCollection;
      import com.mongodb.client.MongoDatabase;
      
      public class Starter {
      
          private static MongoClient mongoClient;
      
          public static void main(String[] args) {
      
              System.setProperty("javax.net.ssl.trustStore", "mongodb.pkcs12");
              System.setProperty("javax.net.ssl.trustStorePassword", "yourPassword");
              System.setProperty("javax.net.ssl.keyStore", "mongodb.pkcs12");
              System.setProperty("javax.net.ssl.keyStorePassword", "yourPassword");
      
              MongoClientURI mongoClientURI = new MongoClientURI(
                      "mongodb://admin:admin@hostname3.xyz.com,hostname2.xyz.com:27017,hostname3.xyz.com:27017/admin?ssl=true");
              mongoClient = new MongoClient(mongoClientURI);
      
              try {
                  MongoDatabase db = mongoClient.getDatabase("CIM");
                  MongoCollection<Document> collection = db.getCollection("orders");
                  System.out.println("No of Documents in orders collection: "
                          + collection.count());
              } catch (Exception ex) {
                  System.out.println(ex.getMessage());
              }
          }
      }
      

        Sep 24, 2018 3:49:13 PM com.mongodb.diagnostics.logging.JULLogger log
        INFO: Discovered cluster type of SHARDED
        Sep 24, 2018 3:49:15 PM com.mongodb.diagnostics.logging.JULLogger log
        INFO: Opened connection [connectionId{localValue:4}] to hostname3.xyz.com:27017
        No of Documents in orders collection: 3