2013-02-25 2 views
3

내 애플리케이션에서 Play 1.2.5, MongoDB 및 Morphia 모듈 1.2.9를 사용 중입니다. Play Framework에서 SSL을 통한 MongoDB 연결

가 DB에 대한 보안 및 암호화 된 연결을 만들려면, 나는 http://docs.mongodb.org/manual/administration/ssl/ http://www.mongodb.org/about/tutorial/build-mongodb-on-linux/

지금 나는 또한 몽고를 사용하여 몽고 쉘에 --ssl 연결할 수 해요 때라도 링크를 사용하여 SSL을 활성화하여 MongoDB를 설치 MongoDB가 실행 중인지 여부를 확인할 수 있습니다. https://mylocalhost.com:27017/

그러나 MongoDB에서 SSL을 활성화 한 후에는 재생 응용 프로그램을 통해 연결할 수 없습니다.

SSL을 통해 연결하는 데 사용할 수있는 구성 내가 application.conf에 사용 된 선이 DB

morphia.db.host=localhost 
morphia.db.port=27017 
morphia.db.db=test 

에 연결되어 있는가에 따라?

나는 인터넷 검색을했고 해결책을 찾지 못했습니다. 이걸 도와주세요. 미리 감사드립니다.

답변

1

나는 스프링 데이터를 사용하고 동일한 문제에 반대했다. 스프링 데이터를 사용하여 나는 몽고 객체를 직접 생성 할 수 있었고이를 생성자 매개 변수로 전달했습니다. 모르 피아도 같은 메커니즘을 가지고 있습니다. 키는 다음과 같습니다.

options.socketFactory = SSLSocketFactory.getDefault(); 

그런 다음 SSL 키를 키 저장소에 설치하면 제대로 작동합니다.

public class MongoFactory { 
    public Mongo buildMongo (String replicaSet, boolean slaveOk, int writeNumber , int connectionsPerHost, boolean useSSL) throws UnknownHostException{ 

     ServerAddress addr = new ServerAddress(); 
     List<ServerAddress> addresses = new ArrayList<ServerAddress>(); 
     int port =0; 
     String host = new String(); 
     if (replicaSet == null) 
      throw new UnknownHostException("Please provide hostname"); 
     replicaSet = replicaSet.trim(); 
     if (replicaSet.length() == 0) 
      throw new UnknownHostException("Please provide hostname"); 
     StringTokenizer tokens = new StringTokenizer(replicaSet, ","); 
     while(tokens.hasMoreTokens()){ 
      String token = tokens.nextToken(); 
      int idx = token.indexOf(":"); 
      if (idx > 0){    
       port = Integer.parseInt(token.substring(idx + 1)); 
       host = token.substring(0 , idx).trim(); 
      } 
      addr = new ServerAddress(host.trim(), port); 
      addresses.add(addr); 
     } 

     MongoOptions options = new MongoOptions(); 
     options.autoConnectRetry = true; 
     if (useSSL){ 
      options.socketFactory = SSLSocketFactory.getDefault(); 
     } 
     options.connectionsPerHost=connectionsPerHost; 
     options.w=writeNumber; 
     options.fsync=false; 
     options.wtimeout=5000; 
     options.connectTimeout=5000; 
     options.autoConnectRetry=true; 
     options.socketKeepAlive=true; 

     Mongo m = new Mongo(addresses, options); 
     if(slaveOk){ 
      m.setReadPreference(ReadPreference.SECONDARY); 
     } 
     return m; 
    } 
}