MongoDB
MongoDB - TLS / SSL का समर्थन करने के लिए एक प्रतिकृति कॉन्फ़िगर करें
खोज…
परिचय
TLS / SSL का समर्थन करने के लिए एक प्रतिकृति कैसे कॉन्फ़िगर करें?
हम आपके स्थानीय वातावरण में 3 नोड्स प्रतिकृति की तैनाती करेंगे और हम स्व-हस्ताक्षरित प्रमाण पत्र का उपयोग करेंगे। प्रोडक्शन में स्व-हस्ताक्षरित प्रमाण पत्र का उपयोग न करें।
अपने ग्राहक को इस प्रतिकृति से कैसे कनेक्ट करें?
हम एक मैंगो शेल कनेक्ट करेंगे।
टीएलएस / एसएसएल, पीकेआई (पब्लिक की इन्फ्रास्ट्रक्चर) सर्टिफिकेट और सर्टिफिकेट अथॉरिटी का विवरण इस दस्तावेज के दायरे से बाहर है।
TLS / SSL का समर्थन करने के लिए एक प्रतिकृति कैसे कॉन्फ़िगर करें?
रूट सर्टिफिकेट बनाएं
रूट प्रमाणपत्र (उर्फ सीए फ़ाइल) का उपयोग आपके प्रमाण पत्र पर हस्ताक्षर करने और पहचान करने के लिए किया जाएगा। इसे जेनरेट करने के लिए नीचे कमांड रन करें।
openssl req -nodes -out ca.pem -new -x509 -keyout ca.key
रूट सर्टिफिकेट और उसकी कुंजी को ध्यान से रखें, दोनों का उपयोग आपके प्रमाणपत्रों पर हस्ताक्षर करने के लिए किया जाएगा। रूट प्रमाणपत्र का उपयोग आपके ग्राहक द्वारा भी किया जा सकता है।
प्रमाणपत्र अनुरोध और निजी कुंजी उत्पन्न करें
सर्टिफिकेट साइनिंग रिक्वेस्ट (उर्फ सीएसआर) जेनरेट करते समय कॉमन नेम (उर्फ सीएन) फील्ड में अपने नोड का सटीक होस्टनाम (या आईपी) इनपुट करें। अन्य क्षेत्रों में बिल्कुल समान मूल्य होना चाहिए। आपको अपनी / etc / मेजबान फ़ाइल को संशोधित करने की आवश्यकता हो सकती है।
नीचे दिए गए आदेश सीएसआर फाइलें और आरएसए निजी कुंजी (4096 बिट्स) उत्पन्न करेंगे।
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_node_1.key -out mongodb_node_1.csr
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_node_2.key -out mongodb_node_2.csr
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_node_3.key -out mongodb_node_3.csr
आपको अपनी प्रतिकृति के प्रत्येक नोड के लिए एक CSR उत्पन्न करना होगा। याद रखें कि आम नाम एक नोड से दूसरे में समान नहीं है। एक ही निजी कुंजी पर कई CSRs आधार न करें।
अब आपके पास 3 CSR और 3 निजी कुंजी होनी चाहिए।
mongodb_node_1.key - mongodb_node_2.key - mongodb_node_3.key
mongodb_node_1.csr - mongodb_node_2.csr - mongodb_node_3.csr
अपने प्रमाणपत्र अनुरोध पर हस्ताक्षर करें
नीचे दिए गए आदेशों को चलाकर प्रत्येक प्रमाणपत्र अनुरोध पर हस्ताक्षर करने के लिए पूर्व में निर्मित CA फ़ाइल (ca.pem) और उसकी निजी कुंजी (ca.key) का उपयोग करें।
openssl x509 -req -in mongodb_node_1.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_node_1.crt
openssl x509 -req -in mongodb_node_2.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_node_2.crt
openssl x509 -req -in mongodb_node_3.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_node_3.crt
आपको प्रत्येक CSR पर हस्ताक्षर करना चाहिए।
अब आपके पास 3 CSR, 3 निजी कुंजी और 3 स्व-हस्ताक्षरित प्रमाणपत्र होना चाहिए। MongoDB द्वारा केवल निजी कुंजी और प्रमाणपत्र का उपयोग किया जाएगा।
mongodb_node_1.key - mongodb_node_2.key - mongodb_node_3.key
mongodb_node_1.csr - mongodb_node_2.csr - mongodb_node_3.csr
mongodb_node_1.crt - mongodb_node_2.crt - mongodb_node_3.crt
प्रत्येक प्रमाण पत्र एक नोड से मेल खाता है। ध्यान से याद रखें कि आपके प्रत्येक CSR ने कौन सी CN / hostname दिया है।
प्रत्येक कुंजी प्रमाण पत्र को अपनी कुंजी के साथ सम्मिलित करें
एक फाइल (MongoDB आवश्यकता) में इसकी कुंजी के साथ प्रत्येक नोड प्रमाण पत्र को प्राप्त करने के लिए नीचे दिए गए कमांड चलाएं।
cat mongodb_node_1.key mongodb_node_1.crt > mongodb_node_1.pem
cat mongodb_node_2.key mongodb_node_2.crt > mongodb_node_2.pem
cat mongodb_node_3.key mongodb_node_3.crt > mongodb_node_3.pem
अब आपके पास 3 PEM फाइलें होनी चाहिए।
mongodb_node_1.pem - mongodb_node_2.pem - mongodb_node_3.pem
अपने प्रतिकृति सेट करें
हम मानेंगे कि आपकी pem फाइलें आपके वर्तमान फ़ोल्डर में और साथ ही डेटा / data1, data / data2 और data / data3 में स्थित हैं।
27017, 27018 और 27019 पोर्ट पर सुन रहे अपने 3 नोड्स प्रतिकृति परिनियोजित करने के लिए नीचे दिए गए आदेश चलाएँ।
mongod --dbpath data/data_1 --replSet rs0 --port 27017 --sslMode requireSSL --sslPEMKeyFile mongodb_node_1.pem
mongod --dbpath data/data_2 --replSet rs0 --port 27018 --sslMode requireSSL --sslPEMKeyFile mongodb_node_2.pem
mongod --dbpath data/data_3 --replSet rs0 --port 27019 --sslMode requireSSL --sslPEMKeyFile mongodb_node_3.pem
अब आपके पास एक 3 नोड्स प्रतिकृति है जो आपके स्थानीय वातावरण पर तैनात है और उनके सभी लेनदेन एन्क्रिप्टेड हैं। आप TLS का उपयोग किए बिना इस प्रतिकृति से कनेक्ट नहीं कर सकते।
म्यूचुअल एसएसएल / म्यूचुअल ट्रस्ट के लिए अपने प्रतिकृति पर तैनात करें
क्लाइंट प्रमाणपत्र (म्यूचुअल एसएसएल) प्रदान करने के लिए अपने क्लाइंट को बाध्य करने के लिए, आपको अपने इंस्टेंस को चलाते समय सीए फाइल को जोड़ना होगा।
mongod --dbpath data/data_1 --replSet rs0 --port 27017 --sslMode requireSSL --sslPEMKeyFile mongodb_node_1.pem --sslCAFile ca.pem
mongod --dbpath data/data_2 --replSet rs0 --port 27018 --sslMode requireSSL --sslPEMKeyFile mongodb_node_2.pem --sslCAFile ca.pem
mongod --dbpath data/data_3 --replSet rs0 --port 27019 --sslMode requireSSL --sslPEMKeyFile mongodb_node_3.pem --sslCAFile ca.pem
अब आपके पास एक 3 नोड्स प्रतिकृति है जो आपके स्थानीय वातावरण पर तैनात है और उनके सभी लेनदेन एन्क्रिप्टेड हैं। आप TLS का उपयोग किए बिना या अपने CA द्वारा विश्वसनीय क्लाइंट प्रमाणपत्र प्रदान किए बिना इस प्रतिकृति से कनेक्ट नहीं कर सकते।
अपने ग्राहक (मोंगो शेल) को एक प्रतिकृति से कैसे कनेक्ट करें?
कोई म्यूचुअल एसएसएल
इस उदाहरण में, हम CA फाइल (ca.pem) का उपयोग कर सकते हैं जो आपने " TLS / SSL का समर्थन करने के लिए एक प्रतिकृति कैसे कॉन्फ़िगर करें " खंड के दौरान उत्पन्न की थी। हम मानेंगे कि CA फ़ाइल आपके वर्तमान फ़ोल्डर में स्थित है।
हम मानेंगे कि आपके 3 नोड्स mongo1: 27017, mongo2: 27018 और mongo3: 27019 पर चल रहे हैं। (आपको अपनी / etc / मेजबान फ़ाइल को संशोधित करने की आवश्यकता हो सकती है।)
MongoDB 3.2.6 से, यदि आपकी CA फ़ाइल आपके ऑपरेटिंग सिस्टम ट्रस्ट स्टोर में पंजीकृत है, तो आप CA फ़ाइल प्रदान किए बिना अपने प्रतिकृति से कनेक्ट कर सकते हैं।
mongo --ssl --host rs0/mongo1:27017,mongo2:27018,mongo3:27019
अन्यथा आपको CA फ़ाइल प्रदान करनी होगी।
mongo --ssl --sslCAFile ca.pem --host rs0/mongo1:27017,mongo2:27018,mongo3:27019
अब आप अपने रेप्लिकासेट से जुड़े हैं और आपके मोंगियो शेल और आपके रेप्लिकासेट के बीच सभी लेन-देन एन्क्रिप्टेड हैं।
म्यूचुअल एसएसएल के साथ
यदि आपका रेप्लिकासेट क्लाइंट सर्टिफिकेट मांगता है, तो आपको रेप्लिकासेट तैनाती द्वारा उपयोग किए गए सीए द्वारा हस्ताक्षरित एक प्रदान करना होगा। क्लाइंट सर्टिफिकेट जनरेट करने के चरण सर्वर सर्टिफिकेट जनरेट करने के लगभग समान हैं।
वास्तव में, आपको CSR निर्माण के दौरान सामान्य नाम फ़ील्ड को संशोधित करना होगा। सामान्य नाम फ़ील्ड में 1 नोड होस्टनाम प्रदान करने के बजाय, आपको अल्पविराम द्वारा अलग किए गए सभी प्रतिकृति होस्टनाम प्रदान करने की आवश्यकता है ।
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_client.key -out mongodb_client.csr
...
Common Name (e.g. server FQDN or YOUR name) []: mongo1,mongo2,mongo3
यदि सामान्य नाम फ़ील्ड बहुत लंबा है (64 बाइट्स से अधिक लंबा) तो आपको सामान्य नाम आकार सीमा का सामना करना पड़ सकता है। इस सीमा को बायपास करने के लिए, आपको CSR जनरेट करते समय SubjectAltName का उपयोग करना होगा।
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_client.key -out mongodb_client.csr -config <(
cat <<-EOF
[req]
default_bits = 4096
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
CN = .
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = mongo1
DNS.2 = mongo2
DNS.3 = mongo3
EOF
)
फिर आप CA प्रमाणपत्र और कुंजी का उपयोग करके CSR पर हस्ताक्षर करते हैं।
openssl x509 -req -in mongodb_client.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_client.crt
अंत में, आप कुंजी और हस्ताक्षरित प्रमाण पत्र जमा करते हैं।
cat mongodb_client.key mongodb_client.crt > mongodb_client.pem
अपने रेप्लिकासेट से कनेक्ट करने के लिए, अब आप नए जनरेट किए गए क्लाइंट प्रमाणपत्र प्रदान कर सकते हैं।
mongo --ssl --sslCAFile ca.pem --host rs0/mongo1:27017,mongo2:27018,mongo3:27019 --sslPEMKeyFile mongodb_client.pem
अब आप अपने रेप्लिकासेट से जुड़े हैं और आपके मोंगियो शेल और आपके रेप्लिकासेट के बीच सभी लेन-देन एन्क्रिप्टेड हैं।