सर्टिफ़िकेट अथॉरिटी के साथ सर्वर/क्लाइंट पेम जेनरेट करने के और भी तरीके हैं यानी file.srl
को शामिल किए बिना , लेकिन यह उत्तर प्रश्न पर अनुवर्ती कार्रवाई के लिए है।
उल्लेखनीय है कि अधिकांश मोंगोडीबी v3.0+ वितरण में अब एसएसएल के लिए समर्थन शामिल है, कृपया एसएसएल का समर्थन करने वाला पैकेज चुनना सुनिश्चित करें। नीचे दिए गए उदाहरण का परीक्षण MongoDB v3.2 के साथ Ubuntu Linux 14.04 पर PyMongo v3.2.1 के साथ किया गया है। जहां एक मशीन ने प्रदर्शन उद्देश्यों के लिए सीए, सर्वर और क्लाइंट पेम फाइलें जेनरेट कीं।
आइए उत्पन्न करते हैं ca.pem
और privkey.pem
. विषय संरचना है /C=<Country Name>/ST=<State>/L=<Locality Name>/O=<Organisation Name>/emailAddress=<email>/CN=<Common Name>
।
mkdir ~/ssl
cd ~/ssl
openssl req -out ca.pem -new -x509 -days 3650 -subj "/C=AU/ST=NSW/O=Organisation/CN=root/[email protected]"
server .pem
उत्पन्न करें फ़ाइल:
hostname # note down the value
echo "00" > file.srl # two random digits number
openssl genrsa -out server.key 2048
openssl req -key server.key -new -out server.req -subj "/C=AU/ST=NSW/O=Organisation/CN=server1/CN=<hostname value>/[email protected]"
openssl x509 -req -in server.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out server.crt -days 3650
cat server.key server.crt > server.pem
openssl verify -CAfile ca.pem server.pem
हालांकि आप आईपी पते का उपयोग CN
. के रूप में कर सकते हैं मूल्य भी, इसकी अनुशंसा नहीं की जाती है। RFC-6125 देखें।
अब हम client.pem
उत्पन्न करते हैं फ़ाइल:
openssl genrsa -out client.key 2048
openssl req -key client.key -new -out client.req -subj "/C=AU/ST=NSW/O=Organisation/CN=client1/[email protected]"
openssl x509 -req -in client.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out client.crt -days 3650
cat client.key client.crt > client.pem
openssl verify -CAfile ca.pem client.pem
.pem
. जनरेट करने के बाद फ़ाइलें, अब आप mongod चला सकते हैं। उदाहरण के लिए:
mongod --sslMode requireSSL --sslPEMKeyFile ~/server.pem --sslCAFile ~/ca.pem
आप मोंगो शेल का उपयोग करके कनेक्शन का परीक्षण कर सकते हैं, उदाहरण के लिए:
mongo --ssl --sslPEMKeyFile ~/client.pem --sslCAFile ~/ca.pem --host <server hostname>
एक बार जब आप सफलतापूर्वक कनेक्ट हो जाते हैं, तो आप PyMongo के साथ प्रयास कर सकते हैं। उदाहरण के लिए:
import ssl
from pymongo import MongoClient
client = MongoClient(
'<server hostname>',
27017,
ssl=True,
ssl_certfile='~/client.pem',
ssl_cert_reqs=ssl.CERT_REQUIRED,
ssl_ca_certs='~/ca.pem'
)
वैकल्पिक रूप से, आप mongod
. का भी उपयोग कर सकते हैं फ्लैग --sslAllowInvalidHostnames localhost
निर्दिष्ट करने के लिए , आदि.
उत्पादन के उपयोग के लिए, आपके MongoDB परिनियोजन को एकल प्रमाणपत्र प्राधिकारी द्वारा उत्पन्न और हस्ताक्षरित मान्य प्रमाणपत्रों का उपयोग करना चाहिए। यदि आप स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग करते हैं, हालांकि संचार चैनल एन्क्रिप्ट किया जाएगा, सर्वर पहचान का कोई सत्यापन नहीं होगा। किसी विश्वसनीय प्रमाणपत्र प्राधिकारी द्वारा हस्ताक्षरित प्रमाणपत्र का उपयोग करने से MongoDB ड्राइवर सर्वर की पहचान सत्यापित कर सकेंगे। सामान्य तौर पर, जब तक नेटवर्क पर भरोसा न हो, स्व-हस्ताक्षरित प्रमाणपत्रों का उपयोग करने से बचें।
अन्य संबंधित लिंक जो आपको उपयोगी लग सकते हैं:
- MongoDB:SSL कॉन्फ़िगर करें।
- MongoDB:सुरक्षा ट्यूटोरियल।
- MongoDB सुरक्षा चेकलिस्ट।