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