चरण 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')
}
}
;
<ब्लॉककोट> स्रोत