3

アプリケーションでPlay1.2.5、MongoDB、およびMorphiaモジュール1.2.9を使用しています。

データベースへの安全で暗号化された接続を作成するために、次のリンクを使用してSSLを有効にしてMongoDBをインストールしました http://docs.mongodb.org/manual/administration/ssl/ http://www.mongodb.org/about/tutorial / build-mongodb-on-linux /

これで、mongo --sslを使用してmongoシェルに接続できるようになり、https://mylocalhost.com:27017/を使用してMongoDBが実行されているかどうかを確認することもできます。

しかし、MongoDBでSSLを有効にした後、Playアプリケーションを介してSSLに接続できません。

以下は、データベースに接続するためにapplication.confで使用した行です。

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

SSL経由で接続するために利用できる構成はありますか?

私はいくつかのグーグルをしました、そして、私はどんな解決策も見つけることができません。これについて私を助けてください?前もって感謝します。

4

2 に答える 2

1

Morphiaモジュールは、現時点ではssl接続をサポートしていません。そして、モルヒネライブラリがそれをサポートしているかどうかはわかりません。この要件を追跡するには、githubで問題を作成してください:https ://github.com/greenlaw110/play-morphia/issues?state = open

于 2013-02-25T19:18:16.413 に答える
1

私はspring-dataを使用していて、同じ問題に直面しました。spring-dataを使用して、Mongoオブジェクトを自分で作成し、コンストラクターパラメーターとして渡すことができました。モルヒネも同じメカニズムを持っているかもしれません。重要なのは:

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;
    }
}
于 2013-02-25T19:24:55.237 に答える