MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

Node.js . के साथ SSL पर MongoDB से कनेक्ट करना

चरण 1:MongoDB 3.0 प्राप्त करें

आपको सबसे पहले यह जानने की जरूरत है कि एसएसएल केवल मोंगोडीबी 3.0 और बाद के संस्करण द्वारा समर्थित है। उबंटू में डिफ़ॉल्ट रिपॉजिटरी में 3.0 नहीं है, इसलिए यहां बताया गया है कि आप इसे कैसे प्राप्त करते हैं:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org=3.0.7 mongodb-org-server=3.0.7 mongodb-org-shell=3.0.7 mongodb-org-mongos=3.0.7 mongodb-org-tools=3.0.7

3.0.7 अब तक का नवीनतम स्थिर संस्करण है, लेकिन बेझिझक 3.0.7 को अपनी पसंदीदा रिलीज़ से प्रतिस्थापित करें।

चरण 2:निजी कुंजी, प्रमाणपत्र और PEM फ़ाइलें प्राप्त करें

PEM में एक सार्वजनिक कुंजी प्रमाणपत्र और उससे जुड़ी निजी कुंजी होती है। इन फ़ाइलों को या तो प्रमाणपत्र प्राधिकरण से IRL डॉलर के साथ प्राप्त किया जा सकता है या OpenSSL के साथ उत्पन्न किया जा सकता है जैसे:

openssl req -newkey rsa:2048 -new -x509 -days 3650 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key
cat mongodb-cert.key mongodb-cert.crt > mongodb.pem

mongodb.pem का उपयोग PEM फ़ाइल के रूप में किया जाएगा, mongodb-cert.key निजी कुंजी फ़ाइल है, और mongodb-cert.crt प्रमाणपत्र फ़ाइल है जिसे CA फ़ाइल के रूप में भी उपयोग किया जा सकता है। आपको इन तीनों की आवश्यकता होगी।

चरण 3:MongoD कॉन्फ़िगर करें

हम यह मानने जा रहे हैं कि आपने इन फ़ाइलों को अपने /etc/ssl/ फ़ोल्डर में कॉपी किया है जहाँ वे हैं। अब हम अपनी MongoDB कॉन्फ़िग फ़ाइल खोलते हैं:

sudo vi /etc/mongod.conf

और "# नेटवर्क इंटरफेस" अनुभाग को इस प्रकार संशोधित करें:

# network interfaces
net:
  port: 27017
  #bindIp: 127.0.0.1
  ssl:
    mode: allowSSL
    PEMKeyFile: /etc/ssl/mongodb.pem
    #CAFile: /etc/ssl/mongodb-cert.crt

कृपया ध्यान दें :हम टिप्पणी कर रहे हैं bindIp . यह बाहरी कनेक्शनों को आपके मोंगो डेटाबेस तक पहुंचने की अनुमति देता है। हम मानते हैं कि यह आपका अंतिम लक्ष्य है (लोकलहोस्ट पर आपका ट्रैफ़िक एन्क्रिप्ट क्यों होगा? ), लेकिन आपको अपने MongoDB सर्वर के लिए प्राधिकरण नियमों को सेट करने के बाद ही ऐसा करना चाहिए।

CAFile पर भी टिप्पणी की गई है क्योंकि यह वैकल्पिक है। मैं इस पोस्ट के अंत में सर्टिफ़िकेट अथॉरिटी ट्रस्ट को स्थापित करने का तरीका बताऊंगा।

हमेशा की तरह, कॉन्फ़िगरेशन फ़ाइल परिवर्तन प्रभावी होने से पहले आपको MongoDB को पुनरारंभ करना होगा:

sudo service mongod restart

क्या आपका सर्वर प्रारंभ करने में विफल रहा? आप अपने दम पर हैं, लेकिन संभवत:आपकी प्रमाणपत्र फ़ाइलों में कोई समस्या है। आप mongod . चलाकर स्टार्ट-अप त्रुटियों की जांच कर सकते हैं मैन्युअल रूप से:

sudo mongod --config /etc/mongod.conf

चरण 4:अपनी सर्वर सेटिंग का परीक्षण करें

इससे पहले कि हम नोड कॉन्फ़िगरेशन के साथ खिलवाड़ करें, आइए सुनिश्चित करें कि mongo से जुड़कर आपका सर्वर सेटअप ठीक से काम कर रहा है। कमांड लाइन क्लाइंट:

mongo --ssl --sslAllowInvalidHostnames --sslAllowInvalidCertificates

जब तक आपके प्रमाणपत्र पर डोमेन नाम 127.0.0.1 न हो या localhost , --sslAllowInvalidHostnames झंडा आवश्यक है। इसके बिना, आपको शायद यह त्रुटि मिलेगी:

E NETWORK  The server certificate does not match the host name 127.0.0.1
E QUERY    Error: socket exception [CONNECT_ERROR] for 
    at connect (src/mongo/shell/mongo.js:179:14)
    at (connect):1:6 at src/mongo/shell/mongo.js:179
exception: connect failed

चरण 5:Node.JS / Mongoose कॉन्फ़िगर करें

यदि आप node-mongodb-native . का उपयोग कर रहे हैं अपने नोड एप्लिकेशन में पैकेज करें, तुरंत बंद करें और नेवला का उपयोग करना शुरू करें। यह इतना मुश्किल नही है। उस ने कहा, mongoose.connect() वस्तुतः एक ही एपीआई है mongodb.connect() , इसलिए उचित रूप से स्थानापन्न करें।

    var fs = require('fs')
      , mongoose = require('mongoose')
      , mongoUri = "mongodb://127.0.0.1:27017?ssl=true"
      , mongoOpt = {
          "sslValidate": false,
          "sslKey": fs.readFileSync('/etc/ssl/mongodb.pem'),
          "sslCert": fs.readFileSync('/etc/ssl/mongodb-cert.crt')
        }
      ;

mongoose.connect(mongoUri, mongoOpt);

चरण 6:[वैकल्पिक रूप से] एक प्रमाणपत्र प्राधिकारी के माध्यम से अपने प्रमाणपत्र सत्यापित करें

अपने एसएसएल प्रमाणपत्रों को सत्यापित करने के लिए, आपको एक सीए (या बंडल . प्राप्त करने की आवश्यकता है ) अपने सर्टिफिकेट अथॉरिटी से फाइल करें। यह बहुत कुछ आपकी प्रमाणपत्र फ़ाइल की तरह दिखाई देगा, लेकिन इसमें अक्सर कई प्रमाणपत्र होंगे (जो यह सत्यापित करने के लिए विश्वास की एक श्रृंखला बनाता है कि कोई प्रमाणपत्र मान्य है ) यदि आप स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग कर रहे हैं, तो आप अपने mongodb-cert.crt का उपयोग कर सकते हैं CA फ़ाइल के रूप में।

आपको यह भी सुनिश्चित करना होगा कि आपके MongoDB सर्वर का होस्टनाम प्रमाणपत्र बनाने के लिए उपयोग किए गए होस्टनाम से मेल खाता है।

चरण 6.3:अपना mongodअपडेट करें विन्यास

sudo vi /etc/mongod.conf

और "# नेटवर्क इंटरफेस" अनुभाग को इस प्रकार संशोधित करें:

# network interfaces net:   port: 27017   #bindIp: 127.0.0.1   ssl:
    mode: allowSSL
    PEMKeyFile: /etc/ssl/mongodb.pem
    CAFile: /etc/ssl/mongodb-ca.crt

sudo service mongod restart

चरण 6.4:अपनी सर्वर सेटिंग का परीक्षण करें

mongo --ssl --sslAllowInvalidHostnames --sslCAFile /etc/ssl/mongodb-ca.crt --sslPEMKeyFile /etc/ssl/mongodb.pem

Mongo क्लाइंट CA फ़ाइल में यह सत्यापित करने के लिए भी पास कर सकते हैं कि वे सही सर्वर से बात कर रहे हैं। यह --sslCAFile . के साथ किया जाता है पैरामीटर

CAFile के साथ कॉन्फ़िगर किए गए Mongo सर्वर के लिए आवश्यक है कि क्लाइंट के पास एक मान्य प्रमाणपत्र हो और सर्वर के लिए निजी कुंजी। मोंगो शेल क्लाइंट में, यह --sslPEMKeyFile में पास करके किया जाता है पैरामीटर।

PEM फ़ाइल के बिना (जिसमें सर्वर का प्रमाणपत्र होता है ), आपको यह त्रुटि दिखाई दे सकती है:

I NETWORK  DBClientCursor::init call() failed
E QUERY    Error: DBClientBase::findN: transport error: 127.0.0.1:27017 ns: admin.$cmd query: { whatsmyuri: 1 }
    at connect (src/mongo/shell/mongo.js:179:14)
    at (connect):1:6 at src/mongo/shell/mongo.js:179
exception: connect failed

सर्वर को net.ssl.weakCertificateValidation को सक्षम करके PEM फ़ाइल के बिना क्लाइंट से अनुरोध स्वीकार करने के लिए कॉन्फ़िगर किया जा सकता है , लेकिन आप बिना किसी वास्तविक लाभ के अपनी सुरक्षा को कमजोर कर देंगे।

चरण 6.5:Node.JS / Mongoose कॉन्फ़िगर करें

यहाँ कुछ गोचा हैं, इसलिए मेरे साथ रहें।

सबसे पहले, आपके पास node-mongodb-native होना चाहिए 2.0 या बाद में। अगर आप नेवले का इस्तेमाल कर रहे हैं तो आपको नेवले की जरूरत है 4.0 या बाद में। पिछले Mongoose संस्करण node-mongodb-native का उपयोग करते हैं 1.* जो किसी भी क्षमता में प्रमाणपत्र सत्यापन का समर्थन नहीं करता है।

दूसरे, कोई sslAllowInvalidHostnames . नहीं है या इसी तरह का विकल्प नोड-मोंगोडब-नेटिव में उपलब्ध है। यह कुछ ऐसा नहीं है जो node-mongodb-native डेवलपर ठीक कर सकते हैं (मैं अब तक होता ) क्योंकि नोड 0.10.* में उपलब्ध मूल टीएलएस लाइब्रेरी इसके लिए कोई विकल्प नहीं देती है। नोड 4.* और 5.* में, एक checkServerIdentity . है विकल्प जो आशा प्रदान करता है, लेकिन io.js मर्ज के बाद मूल नोड शाखा से शाखा में स्विच करने से वर्तमान समय में थोड़ा सिरदर्द हो सकता है।

तो चलिए इसे आजमाते हैं:

var fs = require('fs')
  , mongoose = require('mongoose')
  , mongoUri = "mongodb://127.0.0.1:27017?ssl=true"
  , mongoOpt = {
      "server": { 
        "sslKey": fs.readFileSync('/etc/ssl/mongodb.pem'),
        "sslCert": fs.readFileSync('/etc/ssl/mongodb-cert.crt'),
        "sslCa": fs.readFileSync('/etc/ssl/mongodb-ca.crt')
      }
    }
  ;

अगर आपको होस्टनाम/आईपी बेमेल त्रुटियां मिल रही हैं, तो या तो अपना प्रमाणपत्र ठीक करें, या sslValidate को अक्षम करके इस सारी मेहनत को नकार दें :

var fs = require('fs')
  , mongoose = require('mongoose')
  , mongoUri = "mongodb://127.0.0.1:27017?ssl=true"
  , mongoOpt = {
      "server": {
        "sslValidate": false,
        "sslKey": fs.readFileSync('/etc/ssl/mongodb.pem'),
        "sslCert": fs.readFileSync('/etc/ssl/mongodb-cert.crt'),
        "sslCa": fs.readFileSync('/etc/ssl/mongodb-ca.crt')
      }
    }
  ;
<ब्लॉककोट>

स्रोत



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB के साथ PouchDB का उपयोग करना

  2. मोंगो इंटरफ़ेस

  3. मोंगोडीबी $strLenCP

  4. मोंगोडब - सी # ड्राइवर के साथ कुछ तत्वों को शामिल या बहिष्कृत करें

  5. एकत्रीकरण ढांचे का उपयोग करके MongoDB के साथ समूह गणना