ScaleGrid поддържа SSL конфигурация за MongoDB и може лесно да бъде настроена, както е посочено в по-ранна публикация. Той също така обсъжда необходимостта и плюсовете и минусите на MongoDB с TLS/SSL.
ScaleGrid понастоящем използва самоподписани сертификати за SSL, когато създава възли за нов клъстер. Тъй като приложенията Node.js над драйвера MongoDB Node.js или Mongoose са много популярен избор на нашата платформа, създадохме тази публикация, за да споделим поетапен план за заобикаляне на най-често срещаните проблеми при използването на MongoDB SSL със самоподписани сертификати в Node.js. Тази дискусия се отнася до MongoDB Node.js версия 2.0 и Mongoose версия 4.0.3.
В ScaleGrid ние също ви предоставяме опция да закупите свои собствени SSL сертификати и да ги конфигурирате на сървъра на MongoDB. Моля, изпратете имейл до [email protected] за да научите повече за тази възможност.
Добавяне на файл със сертификат от CA
За да подобрите сигурността на вашата SSL връзка, можете да посочите CA, който да се използва за валидиране на SSL сертификата на MongoDB сървъра. 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 ) се предоставя за деактивиране на проверката на името на хоста. Предлага се както на ниво индивидуален сървър, така и на ниво набор от реплика.