ScaleGrid mendukung konfigurasi SSL untuk MongoDB dan dapat dengan mudah disiapkan seperti yang dijelaskan dalam postingan sebelumnya. Ini juga membahas kebutuhan dan pro dan kontra dari MongoDB dengan TLS/SSL.
ScaleGrid saat ini menggunakan sertifikat yang ditandatangani sendiri untuk SSL saat membuat node untuk cluster baru. Karena aplikasi Node.js melalui driver MongoDB Node.js atau Mongoose adalah pilihan yang sangat populer di platform kami, kami membuat postingan ini untuk membagikan rencana solusi langkah demi langkah untuk masalah yang paling umum dihadapi dalam menggunakan SSL MongoDB dengan self-signed sertifikat di Node.js. Diskusi ini berkaitan dengan MongoDB Node.js versi 2.0 dan Mongoose versi 4.0.3.
Di ScaleGrid, kami juga memberi Anda opsi untuk membeli sertifikat SSL Anda sendiri dan mengonfigurasinya di server MongoDB. Silakan kirim email ke [email protected] untuk mempelajari lebih lanjut tentang peluang ini.
Menambahkan File Sertifikat CA
Untuk meningkatkan keamanan koneksi SSL Anda, Anda dapat menentukan CA yang akan digunakan untuk memvalidasi sertifikat SSL server MongoDB. Node.js memiliki daftar default CA "root" terkenal yang berkonsultasi jika CA tidak ditentukan selama waktu pembuatan koneksi. Namun, karena kita berbicara tentang sertifikat yang ditandatangani sendiri, kita harus menentukan file sertifikat CA untuk verifikasi. Anda dapat menyalin file sertifikat CA yang digunakan untuk masuk sendiri ke mesin klien (Untuk ScaleGrid, ini dijelaskan dalam posting SSL kami yang lebih lama), lalu gunakan sslCA
opsi untuk menunjuk ke jalur file ini, sehingga memungkinkan verifikasi server juga.
Luwak
-
Untuk Cluster Mandiri:
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); ...
-
Untuk Kumpulan Kumpulan Replika:
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 Native Driver (dan pembungkus di sekitarnya, seperti Mongoskin)
-
Untuk Cluster Mandiri:
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(); });
-
Untuk Kumpulan Kumpulan Replika:
Parameter opsi untuk set replika adalah 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(); });
Menonaktifkan Verifikasi Sertifikat SSL
Anda juga dapat menonaktifkan Verifikasi Sertifikat SSL. Ini mungkin paling mudah dilakukan dan paling pasti berhasil untuk Anda, namun, ini bukan cara yang disarankan. Driver MongoDB menyediakan opsi SSL tingkat server dan replika set-level (sslValidate
, sslCA
, sslCert
, sslKey
, sslPass
) untuk mengonfigurasi koneksi SSL. Semua opsi dijelaskan secara rinci dalam dokumentasi.
Dalam kasus sertifikat yang ditandatangani sendiri, opsi yang paling berguna adalah sslValidate
. Ini dapat diatur ke
false
jika terjadi kesalahan seperti: DEPTH_ZERO_SELF_SIGNED_CERT
(sertifikat yang ditandatangani sendiri). Ini menonaktifkan verifikasi sertifikat SSL tetapi koneksi masih tetap terenkripsi.
Mongoose memungkinkan Anda meneruskan parameter ke driver di panggilan koneksinya. Misalnya:
-
Kluster Kumpulan Replika:
sslValidate
perlu disetel kefalse
pada opsi ReplicaSet jadi: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); ...
-
Untuk Driver Asli 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(); });
Menonaktifkan Verifikasi Nama Inang
Alih-alih menonaktifkan validasi SSL sepenuhnya, jika nama host menjadi masalah, Anda dapat menonaktifkan verifikasi nama host saja.
Verifikasi nama host, sebagai bagian dari verifikasi sertifikat CA, saat ini dapat dikonfigurasi. Verifikasi ini selalu disarankan untuk diaktifkan. Namun, ini dapat menyebabkan kegagalan verifikasi bahkan jika ada sedikit ketidakcocokan dalam nama host, seperti pada sertifikat CA versus klien yang mencoba untuk terhubung. Dengan demikian, sebagian besar server TLS/SSL menyediakan cara untuk mematikannya. Sebagai contoh. driver Java MongoDB 3.0 memungkinkan cara untuk menonaktifkan verifikasi nama host melalui sslInvalidHostNameAllowed
Properti. Untuk MongoDB Native Driver 2.0 dan di atasnya, parameter opsi boolean checkServerIdentity (default benar ) disediakan untuk menonaktifkan verifikasi nama host. Ini tersedia baik di server individu dan tingkat set replika.