web-dev-qa-db-ja.com

MongoDBSSL暗号化とSpringのドライバー

レプリカセットとドライバー(Javaクライアント)間のトランスポートに関するMongoDBおよびSSL暗号化に関する情報は非常に限られています。誰かがこれを設定した経験がありますか? stunnelやその他のSSLプロキシ方式を使用せずに、ノード間のトラフィック(クエリとレプリカ情報)を暗号化することを検討しています。

4
Nick Huanca

まず、MongoDB SSLドキュメントが作成されているとしましょう。ここにある情報のほとんどは、最終的にはそこに含まれますが、それまでは.....

Javaドライバーは、Springが使用していると思いますがSSLをサポートしています。SSLでmongoDBを実行するには、現在2つのオプションがあります。1つは、サブスクライバーになり、サブスクライバーエディションを使用できることです。 --SSL(およびSNMP)サポートが組み込まれています:

https://www.10gen.com/mongodb-subscriber-edition-download

これを書いている時点では、これは非常に新しい製品であり、AmazonLinuxとUbuntuでのみ利用可能です。

2番目のオプションは、MongoDBがオープンソースであるという事実のおかげで、SSLをサポートするmongoDBのコピーを自分で作成することです。これを行うには、最初に、非SSLビルドで成功するまで、一般的なビルド手順に従うことをお勧めします。

http://www.mongodb.org/display/DOCS/Building+for+Linux

次に、SSLを有効にするためにsconsに渡された--sslフラグを使用してビルドします。また、必要なopensslライブラリをインストールする必要があります。そうしないと、configureは依存関係のチェックに失敗します(通常はlibsslとlibssl-dev)。

そのステップを完了すると、準備が整います。 SSLを有効にしてMongoDBを実行する場合は、すべてでSSLに接続する必要があることに注意してください。すべてのクライアント、シェル、ドライバー、およびMMSはすべてSSL経由で接続するか、失敗する必要があります。SSLでmongodを起動するには、証明書、キー、パスワードなどが必要です。これらのオプション(渡す他のオプションに加えて):

mongod --sslOnNormalPorts --sslPEMKeyFile <pem> --sslPEMKeyPassword <pass>

次のように、構成ファイル(通常は/etc/mongodb.conf)でこれらのオプションを指定することもできます。

sslOnNormalPorts = true
sslPEMKeyFile = /etc/ssl/mongodb.pem
sslPEMKeyPassword = pass

シェルの場合は、単に使用します

mongo --ssl --Host <hostname> --port <port>

最後に、Javaの使用についてお話しましたが、これは「sslApp.Java」クラスファイルの例です。

import com.mongodb.*;
import javax.net.ssl.SSLContext;
public class sslApp {
public static void main(String args[])
throws Exception {
         MongoOptions o = new MongoOptions();
         o.socketFactory = SSLSocketFactory.getDefault();
         Mongo m = new Mongo( "localhost" , o );
         DB db = m.getDB( "test" );
         DBCollection c = db.getCollection( "foo" );
         System.out.println( c.findOne() );
} }
3
Adam C