sql >> データベース >  >> NoSQL >> MongoDB

Node.jsの自己署名証明書を使用したMongoDBSSL

    ScaleGridはMongoDBのSSL構成をサポートしており、以前の投稿で概説されているように簡単に設定できます。また、TLS/SSLを使用したMongoDBの必要性と長所と短所についても説明します。

    ScaleGridは現在、新しいクラスターのノードを作成するときにSSLに自己署名証明書を使用しています。 MongoDB Node.jsドライバーまたはMongooseを介したNode.jsアプリケーションは、プラットフォームで非常に人気のある選択肢であるため、この投稿を作成して、自己署名でMongoDBSSLを使用する際に最も一般的に直面する問題に対する段階的な回避策を共有します。 Node.jsの証明書。この説明は、MongoDBNode.jsバージョン2.0およびMongooseバージョン4.0.3に関連しています。

    ScaleGridでは、独自のSSL証明書を購入してMongoDBサーバーで構成するオプションも提供しています。この機会の詳細については、[email protected]にメールでお問い合わせください。

    CA証明書ファイルの追加

    SSL接続のセキュリティを向上させるために、MongoDBサーバーのSSL証明書の検証に使用するCAを指定できます。 Node.jsには、接続の作成時にCAが指定されていない場合に参照する、よく知られている「ルート」CAのデフォルトリストがあります。ただし、自己署名証明書について話しているので、検証用にCA証明書ファイルを指定する必要があります。自己署名に使用されたCA証明書ファイルをクライアントマシンにコピーして(ScaleGridの場合、これは以前のSSL投稿で説明されています)、 sslCAを使用できます。 このファイルのパスを指すオプション。これにより、サーバーの検証も可能になります。

    マングース

    • スタンドアロンクラスターの場合:

      var fs = require('fs');
      var mongoose = require('mongoose');
      var certFileBuf = fs.readFileSync(<path to CA cert file>);
      var mongoUrl = 'mongodb://admin:[email protected]:27017/admin?ssl=true';
      var options = {
        server: { sslCA: certFileBuf }
      };
      mongoose.connect(mongoUrl, options);
      ...
      
    • レプリカセットクラスターの場合:

      var fs = require('fs');
      var mongoose = require('mongoose');
      var certFileBuf = fs.readFileSync(<path to CA cert file>);
      var mongoUrl = 'mongodb://admin:[email protected]:27017,test1.servers.example.com.com:27017/admin?replicaSet=RS-rstestNode-0&ssl=true';
      var options = {
        replset: { sslCA: certFileBuf }
      }
      mongoose.connect(mongoUrl, options);
      ...

    MongoDBネイティブドライバー(およびMongoskinのようなそのラッパー)

    • スタンドアロンクラスターの場合:

      var certFileBuf = fs.readFileSync(<path to CA cert file>);
      var mongoUrl = 'mongodb://admin:[email protected]:27017/admin?ssl=true';
      var options = {
        server: { sslCA: certFileBuf}
      };
      var MongoClient = require('mongodb').MongoClient
        , assert = require('assert');
      
      MongoClient.connect(mongoUrl, options, function(err, db) {
         assert.equal(null, err);
         console.log("Connected correctly to server");
         db.close();
       });
      
      
    • レプリカセットクラスターの場合:

      レプリカセットのオプションパラメータはreplSetです。 :

      var options = {
        replSet: {
          sslCA: certFileBuf
        }
      };
      var MongoClient = require('mongodb').MongoClient
        , assert = require('assert');
      
      MongoClient.connect(mongoUrl, options, function(err, db) {
         assert.equal(null, err);
         console.log("Connected correctly to server");
         db.close();
       });
      
      

    SSL証明書検証の無効化

    SSL証明書の検証を完全に無効にすることもできます。これはおそらく最も簡単で、確実に機能しますが、推奨される方法ではありません。 MongoDBドライバーは、サーバーレベルおよびレプリカセットレベルのSSLオプション( sslValidate )を提供します。 、 sslCA sslCert sslKey sslPass )SSL接続を構成します。すべてのオプションについては、ドキュメントで詳しく説明されています。

    自己署名証明書の場合、最も便利なオプションは sslValidateです。 。これはfalseに設定できます 次のようなエラーの場合: DEPTH_ZERO_SELF_SIGNED_CERT (自己署名証明書)。これによりSSL証明書の検証が無効になりますが、接続は暗号化されたままになります。

    Mongooseを使用すると、接続呼び出しでパラメータをドライバに渡すことができます。例:

    • レプリカセットクラスター:

      sslValidate falseに設定する必要があります ReplicaSetオプションで:

      var mongoose = require('mongoose');
      var mongoUrl = 'mongodb://admin:[email protected]:27017,test1.servers.example.com.com:27017/admin?replicaSet=RS-rstestNode-0&ssl=true';
      var options = {
        replset: {sslValidate: false}
      }
      mongoose.connect(mongoUrl, options);
      ...
      
    • MongoDBネイティブドライバーの場合:

      var options = {
      replSet: {
          sslValidate: false
        }
      };
      var MongoClient = require('mongodb').MongoClient
        , assert = require('assert');
      
      MongoClient.connect(mongoUrl, options, function(err, db) {
         assert.equal(null, err);
         console.log("Connected correctly to server");
         db.close();
       });
      
      

    ホスト名検証の無効化

    SSL検証を完全に無効にする代わりに、ホスト名が問題になる場合は、ホスト名の検証を無効にすることができます。

    CA証明書検証の一部としてのホスト名検証は、現在構成可能です。この検証をオンにすることを常にお勧めします。ただし、CA証明書と接続しようとしているクライアントのように、ホスト名にわずかな不一致がある場合でも、検証が失敗する可能性があります。したがって、ほとんどのTLS / SSLサーバーは、それをオフにする方法を提供します。例えば。 Java MongoDBドライバー3.0を使用すると、 sslInvalidHostNameAllowedを介してホスト名の検証を無効にすることができます。 財産。 MongoDB Native Driver 2.0以降の場合、ブールオプションパラメーター checkServerIdentity (デフォルトの true )は、ホスト名の検証を無効にするために提供されています。個々のサーバーレベルとレプリカセットレベルの両方で利用できます。


    1. 運用データベースのセキュリティ–パート1

    2. 原因:java.lang.IllegalArgumentException:CONTAINING(1):[IsContaining、Containing、Contains]はredisクエリの派生ではサポートされていません-Redis

    3. Ubuntu18.04でMySQLマスタースレーブレプリケーションをセットアップする方法

    4. Redisで特殊文字を含む数十万のキーを一括削​​除する方法