sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB SSL s certifikáty s vlastním podpisem v Node.js

ScaleGrid podporuje konfiguraci SSL pro MongoDB a lze ji snadno nastavit, jak je uvedeno v dřívějším příspěvku. Pojednává také o potřebě a výhodách a nevýhodách MongoDB s TLS/SSL.

ScaleGrid v současné době používá pro SSL certifikáty s vlastním podpisem při vytváření uzlů pro nový cluster. Vzhledem k tomu, že aplikace Node.js přes ovladač MongoDB Node.js nebo Mongoose jsou na naší platformě velmi oblíbené, vytvořili jsme tento příspěvek, abychom se s vámi podělili o podrobný plán řešení nejčastějších problémů při používání MongoDB SSL s self-signed certifikáty v Node.js. Tato diskuse se týká MongoDB Node.js verze 2.0 a Mongoose verze 4.0.3.

Ve ScaleGrid vám také poskytujeme možnost zakoupit si vlastní certifikáty SSL a nakonfigurovat je na serveru MongoDB. Chcete-li se o této příležitosti dozvědět více, zašlete e-mail na adresu [email protected].

Přidání souboru certifikátu CA

Chcete-li zlepšit zabezpečení vašeho připojení SSL, můžete zadat CA, která se má použít k ověření certifikátu SSL serveru MongoDB. Node.js má výchozí seznam dobře známých „kořenových“ certifikačních autorit, které konzultuje, pokud certifikační autorita není specifikována během vytváření připojení. Protože však mluvíme o certifikátech s vlastním podpisem, budeme muset pro ověření zadat soubor certifikátu CA. Můžete zkopírovat soubor certifikátu CA, který byl použit pro vlastní přihlášení do klientského počítače (pro ScaleGrid je to popsáno v našem starším příspěvku SSL), a poté použít sslCA možnost ukázat na cestu k tomuto souboru, a tím umožnit i ověření serveru.

Mungus

  • Pro samostatné clustery:

    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);
    ...
    
  • Pro clustery sady replik:

    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);
    ...

Nativní ovladač MongoDB (a obaly kolem něj, jako Mongoskin)

  • Pro samostatné clustery:

    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();
     });
    
    
  • Pro clustery sady replik:

    Parametr volby pro sady replik je 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();
     });
    
    

Zakázání ověření certifikátu SSL

Ověření certifikátu SSL můžete také úplně zakázat. To je možná nejjednodušší a jistě to pro vás bude fungovat, ale není to doporučený způsob, jak jít. Ovladač MongoDB poskytuje možnosti SSL na úrovni serveru a sady replik (sslValidate , sslCA , sslCert , sslKey , sslPass ) pro konfiguraci připojení SSL. Všechny možnosti jsou podrobně popsány v dokumentaci.

V případě certifikátů s vlastním podpisem je nejužitečnější možností sslValidate . Toto lze nastavit na false v případě chyb jako: DEPTH_ZERO_SELF_SIGNED_CERT (certifikát s vlastním podpisem). Tím se zakáže ověřování certifikátu SSL, ale připojení zůstává šifrováno.

Mongoose vám umožňuje předat parametry řidiči v jeho připojení. Například:

  • Shluky sady replik:

    sslValidate musí být nastaveno na false u možnosti ReplicaSet, takže:

    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);
    ...
    
  • Pro nativní ovladač 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();
     });
    
    

Zakázání ověření názvu hostitele

Namísto úplného zakázání ověřování SSL, pokud jsou názvy hostitelů problém, stačí zakázat ověřování názvu hostitele.

Ověření názvu hostitele jako součást ověření certifikátu CA je aktuálně konfigurovatelné. Vždy se doporučuje toto ověření zapnout. Může to však vést k selhání ověření, i když dojde k sebemenší neshodě v názvu hostitele, jako je certifikát CA a klient, který se pokouší připojit. Většina serverů TLS/SSL tedy poskytuje způsob, jak jej vypnout. Například. ovladač Java MongoDB 3.0 umožňuje způsob, jak zakázat ověřování názvu hostitele pomocí sslInvalidHostNameAllowed vlastnictví. Pro MongoDB Native Driver 2.0 a vyšší, booleovský parametr možnosti checkServerIdentity (výchozí pravda ) slouží k deaktivaci ověřování názvu hostitele. Je k dispozici jak na úrovni jednotlivých serverů, tak na úrovni sady replik.


  1. Instalace/nastavení Mongos v Elastic Beanstalk

  2. Uložte vnořený hash v redis prostřednictvím aplikace node.js

  3. 4 způsoby aktualizace dokumentu v MongoDB

  4. Jak používat Spring pro připojení k MongoDB, které vyžaduje ověření