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

सी # में स्व-हस्ताक्षरित प्रमाणपत्रों के साथ मोंगोडीबी एसएसएल

मोंगोडीबी को उत्पादन में तैनात करते समय, यह दृढ़ता से अनुशंसा की जाती है कि आप अधिकतम सुरक्षा और उपलब्धता के लिए एसएसएल-सक्षम भू-वितरित प्रतिकृति-सेट कॉन्फ़िगरेशन का उपयोग करें। स्केलग्रिड आपको एसएसएल स्थापित करने के लिए दो विकल्प प्रदान करता है।

एक विकल्प है अपने स्वयं के CA-हस्ताक्षरित SSL प्रमाणपत्र खरीदना और उन्हें MongoDB सर्वर पर कॉन्फ़िगर करना। यदि आपका एप्लिकेशन सार्वजनिक नेटवर्क पर उत्पादन डेटाबेस से जुड़ता है, तो इसके बारे में अधिक जानने के लिए [email protected] पर संपर्क करें।

लेकिन डिफ़ॉल्ट रूप से, हम नए क्लस्टर के लिए नोड बनाते समय SSL के लिए स्व-हस्ताक्षरित प्रमाणपत्रों को कॉन्फ़िगर करते हैं। यह अतिरिक्त लागतों से बचा जाता है, और सही ढंग से कॉन्फ़िगर किए जाने पर समान रूप से सुरक्षित हो सकता है। लेकिन इसका मतलब यह है कि प्रमाणपत्र श्रृंखला को सत्यापित करने के लिए आपके MongoDB ड्राइवर को कुछ मदद की ज़रूरत है।

स्व-हस्ताक्षरित प्रमाणपत्रों को संभालते समय, कुछ डेवलपर्स एक साथ सत्यापन को दरकिनार करते हैं, और सुरक्षा से गंभीर रूप से समझौता करते हैं! इस ब्लॉग पोस्ट में, हम आपको आधिकारिक C# MongoDB ड्राइवर का उपयोग करके SSL के लिए स्व-हस्ताक्षरित प्रमाणपत्रों के साथ कॉन्फ़िगर किए गए MongoDB सर्वर से सुरक्षित रूप से कनेक्ट करने के लिए दो तरीके दिखाते हैं। कुछ सरल चरणों के साथ, आप अपने ड्राइवर को वह जानकारी प्रदान कर सकते हैं जो सर्वर प्रमाणपत्र को सत्यापित करने और कनेक्शन को सुरक्षित रखने के लिए आवश्यक है।

MongoDB SSL को अपने C# एप्लिकेशन से कैसे कनेक्ट करें ट्वीट करने के लिए क्लिक करें

आवश्यकताएं

आगे बढ़ने से पहले,

  • सुनिश्चित करें कि आपका एप्लिकेशन आपके स्केलग्रिड परिनियोजन से जुड़ सकता है। अपने एप्लिकेशन को स्केलग्रिड परिनियोजन से जोड़ने के लिए सामान्य चरणों की समीक्षा करने के लिए कृपया हमारे MongoDB कनेक्शन सहायता दस्तावेज़ देखें।
  • आपको MongoDB ड्राइवर स्थापित करना होगा। C# MongoDB.Driver को स्थापित करने और उपयोग करने के चरणों की समीक्षा करने के लिए कृपया MongoDB ड्राइवर दस्तावेज़ देखें।

ध्यान दें:सभी कोड नमूनों का परीक्षण MongoDB ड्राइवर v2.8.1 के साथ .NET Framework v4.6.1 के साथ किया गया है। हालांकि, उन्हें .NET Framework और MongoDB ड्राइवर के किसी भी हाल के संस्करण पर काम करना चाहिए।

यह याद रखें...

कोड नमूने में फ़ाइल पथ और कनेक्शन URL को अपने स्वयं के फ़ाइल पथ और URL में संशोधित करें। अन्यथा कोड नमूने काम नहीं करेंगे। जहां आपको परिवर्तन करने की आवश्यकता है, उसके लिए कृपया कोड नमूने के मोटे भाग देखें। उदाहरण के लिए:

  • =C:\Users\User\Folder\caCert.cer
  • =mongodb://admin:@SG-example.servers.example.com:27017

विधि 1:स्केलग्रिड प्रमाणपत्र को Windows Trust Store में जोड़ना

C# और .NET Framework के साथ स्व-हस्ताक्षरित प्रमाणपत्रों का उपयोग करने के सबसे सरल तरीकों में से एक Windows ट्रस्ट स्टोर पर प्रमाणपत्र को "विश्वसनीय रूट" के रूप में जोड़ना है। यहां बताया गया है कि आप इसे कैसे कर सकते हैं:

  1. स्केलग्रिड UI से अपना CA प्रमाणपत्र डाउनलोड करें।
  2. एक पावरशेल प्रॉम्प्ट खोलें - यदि आप प्रमाण पत्र को सभी उपयोगकर्ताओं के लिए विश्वसनीय-रूट के रूप में जोड़ना चाहते हैं, तो आपको इसे प्रशासनिक मोड में खोलना होगा।
  3. निम्न आदेश निष्पादित करें, या Microsoft प्रबंधन कंसोल का उपयोग करके ऐसा करें:
    • केवल वर्तमान उपयोगकर्ता के लिए जोड़ने के लिए:
    Import-Certificate -FilePath <path-to-downloaded-CA-Cert.cer> -CertStoreLocation 'Cert:\CurrentUser\Root'
    • सभी के लिए जोड़ने के लिए:
    Import-Certificate -FilePath <path-to-downloaded-CA-Cert.cer> -CertStoreLocation Cert:\LocalMachine\Root'

बस! अब स्व-हस्ताक्षरित प्रमाणपत्र सभी डिफ़ॉल्ट सत्यापन पास करेगा, और आप एक MongoDB क्लाइंट बनाने के लिए तैयार हैं।

var connURL = "mongodb://admin:<password>@<host1>,<host2>:27017/admin?replicaSet=<ReplicaSetName>&ssl=true";
var client = new MongoClient(connURL);

विधि 2:कस्टम सत्यापन कॉलबैक का उपयोग करना

ScaleGrid प्रमाणपत्र को Windows Trust Store में जोड़ने में दो समस्याएं हैं:

  • सेटिंग मशीन पर चलने वाले सभी प्रोग्रामों पर लागू होती है:यह एक सुरक्षा भेद्यता हो सकती है।
  • यह प्रति मशीन एक बार किया जाना है। यदि आप अपना कोड किसी नए सर्वर पर ले जाते हैं, तो यह अचानक काम करना बंद कर सकता है। यह विधि मानवीय त्रुटि के लिए प्रवण छोड़ देता है।

इसलिए, स्व-हस्ताक्षरित प्रमाणपत्रों का उपयोग करके कनेक्ट करने का अनुशंसित तरीका एक कस्टम सत्यापन कॉलबैक का उपयोग करना है जो प्रमाणपत्र को सत्यापित करता है। यहां बताया गया है कि आप यह कैसे कर सकते हैं:

  1. अपना CA प्रमाणपत्र डाउनलोड करें और इसे उस स्थान पर सहेजें जहां आपका एप्लिकेशन पहुंच सकता है (यह आमतौर पर इसकी डेटा निर्देशिका होगी)।
  2. अपने आवेदन से, आप इस प्रमाणपत्र को पढ़ सकते हैं और मोंगोडीबी सर्वर से प्राप्त प्रमाणपत्र से मेल खा सकते हैं।
  3. वैकल्पिक रूप से, आप प्रमाणपत्र का क्रिप्टोग्राफ़िक हैश स्टोर कर सकते हैं। प्रमाणपत्र पढ़ने और मिलान करने के बजाय, आप प्राप्त प्रमाणपत्र पर क्रिप्टोग्राफ़िक हैश की गणना कर सकते हैं और परिणामों का मिलान कर सकते हैं।

यहाँ एक नमूना प्रोग्राम है जिसमें CA प्रमाणपत्र caCert.cer नाम के साथ उसकी बिन निर्देशिका के अंतर्गत संग्रहीत है। यह केवल MongoDB सर्वर पर मौजूद सभी डेटाबेस की एक सूची को प्रिंट करता है:

using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace TestMongoDB
{
  class Program
  {
    static void Main(string[] args)
    {
      var connURL = "mongodb:<password>//admin:@<host1>,<host2>:27017/admin?replicaSet=<Replica-Set-Name>&ssl=true";
      var clientSettings = MongoClientSettings.FromUrl(new MongoUrl(connURL));
      clientSettings.UseSsl = true;
      clientSettings.VerifySslCertificate = true;
      clientSettings.SslSettings = new SslSettings();
      clientSettings.SslSettings.ServerCertificateValidationCallback = ValidateServerCertficate;
      var client = new MongoClient(clientSettings);
      using (IAsyncCursor cursor = client.ListDatabases())
      {
        while (cursor.MoveNext())
        {
          foreach (var doc in cursor.Current)
          {
            Console.WriteLine(doc["name"]); // database name
          }
        }
      }
    }

    private static bool ValidateServerCertficate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
      bool certMatch = false; // Assume failure
      switch(sslPolicyErrors)
      {
        case SslPolicyErrors.None:
          Console.WriteLine("No validation errors - accepting certificate");
          certMatch = true;
          break;
        case SslPolicyErrors.RemoteCertificateChainErrors:
          Console.WriteLine("Failed to validate certificate chain. Most likely a self-signed certificate");
          if (chain.ChainElements.Count == 1 && chain.ChainStatus[0].Status == X509ChainStatusFlags.UntrustedRoot) //It is a self-signed certificate, so chain length will be 1.
          {
            X509Certificate savedCert = X509Certificate.CreateFromCertFile("caCert.cer");
            if (savedCert.Equals(cert)) //This verifies that the issuer and serial number matches. You can also use a cryptographic hash, or match the two certificates byte by byte.
            {
              Console.WriteLine("The certificates match");
              certMatch = true;
            }
          }
          break;
        default:
          Console.WriteLine("Name mismatch or remote-cert not available. Rejecting connection");
          break;
      }
      return certMatch;
    }
  }
}

समस्या निवारण

यदि आपको अपने SSL-सक्षम MongoDB परिनियोजन से कनेक्ट करने में समस्या हो रही है, तो डिबगिंग के लिए यहां कुछ युक्तियां दी गई हैं:

  • सबसे पहले, सत्यापित करें कि आप वास्तव में उस सर्वर से MongoDB सर्वर से जुड़ सकते हैं जहां आपका एप्लिकेशन चल रहा है। ऐसा करने का सबसे सरल तरीका क्लाइंट मशीन पर मोंगो शेल स्थापित करना है। लिनक्स पर, आपको संपूर्ण MongoDB सर्वर स्थापित करने की आवश्यकता नहीं होगी - आप केवल शेल स्थापित करना चुन सकते हैं। एक बार शेल उपलब्ध हो जाने पर, सर्वर से कनेक्ट करने का प्रयास करने के लिए हमारे द्वारा प्रदान किए गए 'कमांड लाइन सिंटैक्स' का उपयोग करने का प्रयास करें।
  • यदि आप मोंगो शेल के माध्यम से कनेक्ट करने में असमर्थ हैं, तो इसका मतलब है कि क्लाइंट मशीन MongoDB सर्वर के पोर्ट 27017 तक पहुंचने में असमर्थ है। क्लाइंट और सर्वर मशीनों के बीच कनेक्टिविटी सुनिश्चित करने के लिए अपने सुरक्षा समूह, वीपीसी, और/या स्केलग्रिड फ़ायरवॉल सेटिंग्स को देखें।
  • यदि नेटवर्क कनेक्टिविटी सही है, तो जांच करने वाली अगली बात यह है कि आप MongoDB ड्राइवर और .NET Framework के संस्करणों का उपयोग कर रहे हैं जो आपके MongoDB सर्वर के संस्करण के साथ संगत हैं।
  • यदि आपने पुष्टि की है कि ड्राइवर संस्करण सही हैं, तो डिबग मोड में एक नमूना C# प्रोग्राम चलाने का प्रयास करें, जैसा कि हमने ऊपर प्रदान किया है। चरण-दर-चरण निष्पादन समस्या को जड़ से खत्म करने में मदद करेगा।
  • यदि आपको अभी भी अपने इंस्टेंस से कनेक्ट करने में समस्या हो रही है, तो कृपया ऊपर दिए गए समस्या निवारण चरणों के विस्तृत परिणामों और C# और आपके द्वारा उपयोग किए जा रहे Mongo ड्राइवर के सटीक संस्करणों के साथ [email protected] पर हमसे संपर्क करें।
  • ली>

यदि आप स्केलग्रिड में नए हैं और इस ट्यूटोरियल को आज़माना चाहते हैं, तो प्लेटफ़ॉर्म को एक्सप्लोर करने और MongoDB को अपने C# एप्लिकेशन से कनेक्ट करने का परीक्षण करने के लिए 30-दिन के निःशुल्क परीक्षण के लिए साइन अप करें। ।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्या mongoDB ने मुद्दों को फिर से जोड़ा है या क्या मैं इसे गलत कर रहा हूं?

  2. MongoDB - त्रुटि:getMore कमांड विफल:कर्सर नहीं मिला

  3. मोंगोडब में दो क्षेत्रों के समवर्ती मान से मेल खाने वाले रिकॉर्ड का चयन करें

  4. नेवला अद्यतन/अपर्ट?

  5. दिनांक सीमा पर $gt और $lt बाधाओं का उपयोग करके Mongoexport