MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB SSL với chứng chỉ tự ký trong Node.js

ScaleGrid hỗ trợ cấu hình SSL cho MongoDB và có thể dễ dàng thiết lập như đã nêu trong bài trước. Nó cũng thảo luận về nhu cầu và ưu nhược điểm của MongoDB với TLS / SSL.

ScaleGrid hiện sử dụng chứng chỉ tự ký cho SSL khi tạo các nút cho một cụm mới. Vì các ứng dụng Node.js trên trình điều khiển MongoDB Node.js hoặc Mongoose là những lựa chọn rất phổ biến trên nền tảng của chúng tôi, chúng tôi đã tạo bài đăng này để chia sẻ kế hoạch giải quyết từng bước cho các vấn đề thường gặp nhất khi sử dụng MongoDB SSL với tính năng tự ký chứng chỉ trong Node.js. Cuộc thảo luận này liên quan đến MongoDB Node.js phiên bản 2.0 và Mongoose phiên bản 4.0.3.

Tại ScaleGrid, chúng tôi cũng cung cấp cho bạn tùy chọn mua chứng chỉ SSL của riêng bạn và định cấu hình chúng trên máy chủ MongoDB. Vui lòng gửi email tới [email protected] để tìm hiểu thêm về cơ hội này.

Thêm tệp chứng chỉ CA

Để cải thiện tính bảo mật của kết nối SSL, bạn có thể chỉ định CA được sử dụng để xác thực chứng chỉ SSL máy chủ MongoDB. Node.js có một danh sách mặc định các CA “gốc” nổi tiếng mà nó tư vấn nếu CA không được chỉ định trong thời gian tạo kết nối. Tuy nhiên, vì chúng ta đang nói về chứng chỉ tự ký nên chúng ta sẽ phải chỉ định tệp chứng chỉ CA để xác minh. Bạn có thể sao chép tệp chứng chỉ CA được sử dụng để tự đăng nhập vào máy khách (Đối với ScaleGrid, tệp này được mô tả trong bài đăng SSL cũ hơn của chúng tôi), rồi sử dụng sslCA để trỏ đến đường dẫn của tệp này, do đó cũng cho phép xác minh máy chủ.

Mongoose

  • Đối với các cụm độc lập:

    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);
    ...
    
  • Đối với các cụm tập hợp bản sao:

    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 (và các trình bao bọc xung quanh nó, như Mongoskin)

  • Đối với các cụm độc lập:

    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();
     });
    
    
  • Đối với các cụm tập hợp bản sao:

    Tham số tùy chọn cho các tập hợp bản sao là 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();
     });
    
    

Tắt xác minh chứng chỉ SSL

Bạn cũng có thể tắt hoàn toàn Xác minh chứng chỉ SSL. Đây có lẽ là cách dễ thực hiện nhất và chắc chắn nhất sẽ hiệu quả với bạn, tuy nhiên, đó không phải là cách được khuyến nghị. Trình điều khiển MongoDB cung cấp các tùy chọn SSL cấp máy chủ và cấp bản sao (sslValidate , sslCA , sslCert , sslKey , sslPass ) để định cấu hình các kết nối SSL. Tất cả các tùy chọn được mô tả chi tiết trong tài liệu.

Trong trường hợp chứng chỉ tự ký, tùy chọn hữu ích nhất là sslValidate . Điều này có thể được đặt thành false trong trường hợp có lỗi như:DEPTH_ZERO_SELF_SIGNED_CERT (chứng chỉ tự ký). Thao tác này vô hiệu hóa xác minh chứng chỉ SSL nhưng kết nối vẫn được mã hóa.

Mongoose cho phép bạn chuyển các thông số xuống trình điều khiển trong cuộc gọi kết nối của nó. Ví dụ:

  • Nhóm bộ bản sao:

    sslValidate cần được đặt thành false tại tùy chọn ReplicaSet như vậy:

    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);
    ...
    
  • Đối với MongoDB Native Driver:

    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();
     });
    
    

Tắt xác minh tên máy chủ

Thay vì vô hiệu hóa hoàn toàn xác thực SSL, nếu tên máy chủ là vấn đề, người ta chỉ có thể tắt xác minh tên máy chủ.

Xác minh tên máy chủ, như một phần của xác minh chứng chỉ CA, hiện có thể định cấu hình. Chúng tôi luôn khuyên bạn nên bật xác minh này. Tuy nhiên, nó có thể dẫn đến việc xác minh không thành công ngay cả khi có sự không khớp nhỏ nhất trong tên máy chủ, như trong chứng chỉ CA so với ứng dụng khách đang cố gắng kết nối. Do đó, hầu hết các máy chủ TLS / SSL đều cung cấp một cách để tắt nó đi. Ví dụ. trình điều khiển Java MongoDB 3.0 cho phép một cách vô hiệu hóa xác minh tên máy chủ thông qua sslInvalidHostNameAllowed bất động sản. Đối với MongoDB Native Driver 2.0 trở lên, tham số tùy chọn boolean checkServerIdentity (mặc định true ) được cung cấp để tắt xác minh tên máy chủ. Nó có sẵn ở cả cấp máy chủ riêng lẻ và cấp thiết lập bản sao.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sử dụng chỉ mục ghép MongoDB

  2. GSSException:Không có thông tin xác thực hợp lệ được cung cấp (Cấp cơ chế:Không tìm thấy bất kỳ Kerberos tgt nào)

  3. Sao lưu MongoDB dưới dạng văn bản thay vì nhị phân để kiểm soát nguồn

  4. Cách tự động hóa và quản lý MongoDB với ClusterControl

  5. nâng cấp mongodb