MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB SSL z samopodpisanymi certyfikatami w C#

Podczas wdrażania MongoDB w środowisku produkcyjnym zdecydowanie zaleca się korzystanie z konfiguracji zestawu replik rozproszonych geograficznie obsługującej protokół SSL, aby zapewnić maksymalne bezpieczeństwo i dostępność. ScaleGrid zapewnia dwie opcje konfiguracji SSL.

Jedną z opcji jest zakup własnych certyfikatów SSL podpisanych przez CA i skonfigurowanie ich na serwerze MongoDB. Jeśli Twoja aplikacja łączy się z produkcyjną bazą danych przez sieć publiczną, skontaktuj się z [email protected], aby dowiedzieć się więcej na ten temat.

Ale domyślnie konfigurujemy samopodpisane certyfikaty dla SSL podczas tworzenia węzłów dla nowego klastra. Pozwala to uniknąć dodatkowych kosztów i może być równie bezpieczne, gdy jest prawidłowo skonfigurowane. Ale to oznacza, że ​​twój sterownik MongoDB potrzebuje pomocy, aby zweryfikować łańcuch certyfikatów.

Podczas obsługi certyfikatów z podpisem własnym, niektórzy programiści całkowicie obchodzą weryfikację i poważnie zagrażają bezpieczeństwu! W tym poście na blogu przedstawiamy dwie metody bezpiecznego łączenia się z serwerem MongoDB skonfigurowanym z samopodpisanymi certyfikatami dla SSL, przy użyciu oficjalnego sterownika C# MongoDB. W kilku prostych krokach możesz dostarczyć swojemu kierowcy informacje potrzebne do zweryfikowania certyfikatu serwera i zabezpieczenia połączenia.

Jak podłączyć MongoDB SSL do aplikacji C#Kliknij, aby tweetować

Warunki wstępne

Zanim przejdziesz dalej

  • Upewnij się, że aplikacja może połączyć się z wdrożeniem ScaleGrid. Proszę zapoznać się z naszym dokumentem pomocy MongoDB Connections, aby zapoznać się z ogólnymi krokami łączenia aplikacji z wdrożeniem ScaleGrid.
  • Musisz mieć zainstalowany sterownik MongoDB. Proszę zapoznać się z dokumentacją MongoDB Driver, aby przejrzeć kroki instalacji i używania C# MongoDB.Driver.

Uwaga:wszystkie próbki kodu zostały przetestowane przy użyciu sterownika MongoDB v2.8.1 wraz z .NET Framework v4.6.1. Powinny jednak działać na każdej stosunkowo nowej wersji .NET Framework i sterownika MongoDB.

Pamiętaj, aby…

Zmodyfikuj ścieżki plików i adresy URL połączeń w przykładach kodu do własnych ścieżek plików i adresów URL. W przeciwnym razie próbki kodu nie będą działać. Zobacz pogrubione części przykładów kodu, w których musisz wprowadzić zmiany. Na przykład:

  • <ścieżka-do-pobranego-CA-Cert.cer> =C:\Użytkownicy\Użytkownik\Folder\caCert.cer
  • =mongodb://admin:@SG-example.servers.example.com:27017

Metoda 1:dodanie certyfikatu ScaleGrid do sklepu Windows Trust Store

Jednym z najprostszych sposobów korzystania z samopodpisanych certyfikatów z C# i .NET Framework jest dodanie certyfikatu jako „Trusted Root” w Windows Trust Store. Oto jak możesz to zrobić:

  1. Pobierz certyfikat CA z interfejsu ScaleGrid.
  2. Otwórz monit PowerShell – jeśli chcesz dodać certyfikat jako zaufany katalog główny dla wszystkich użytkowników, będziesz musiał otworzyć go w trybie administracyjnym.
  3. Wykonaj następujące polecenie lub zrób to za pomocą konsoli Microsoft Management Console.:
    • Aby dodać tylko dla bieżącego użytkownika:
    Import-Certificate-FilePath <Ścieżka-do-pobranego-CA-Cert.cer> -CertStoreLocation 'Cert:\CurrentUser\Root'
    • Aby dodać dla wszystkich:
    Import-Certificate-FilePath <Ścieżka-do-pobranego-CA-Cert.cer> -CertStoreLocation Cert:\LocalMachine\Root'

To wszystko! Teraz certyfikat z podpisem własnym przejdzie wszystkie domyślne weryfikacje i jesteś gotowy do utworzenia klienta MongoDB.

var connURL ="mongodb://admin: @ , :27017/admin?replicaSet= &ssl=true";var klient =nowy MongoClient(connURL);

Metoda 2:użycie niestandardowego wywołania zwrotnego walidacji

Są dwa problemy z dodaniem certyfikatu ScaleGrid do Windows Trust Store:

  • Ustawienia dotyczą wszystkich programów uruchomionych na komputerze:może to być luka w zabezpieczeniach.
  • Trzeba to zrobić raz na maszynę. Jeśli przeniesiesz swój kod na nowy serwer, może on nagle przestać działać. To sprawia, że ​​metoda jest podatna na błędy ludzkie.

Dlatego zalecanym sposobem łączenia się przy użyciu certyfikatów z podpisem własnym jest użycie niestandardowego wywołania zwrotnego walidacji, które weryfikuje certyfikat. Oto jak możesz to zrobić:

  1. Pobierz certyfikat CA i zapisz go w lokalizacji, do której Twoja aplikacja ma dostęp (zazwyczaj będzie to katalog danych).
  2. W swojej aplikacji możesz odczytać ten certyfikat i dopasować go do tego, który otrzymałeś z serwera MongoDB.
  3. Alternatywnie możesz przechowywać skrót kryptograficzny certyfikatu. Zamiast czytać certyfikat i dopasowywać, możesz obliczyć skrót kryptograficzny na otrzymanym certyfikacie i dopasować wyniki.

Oto przykładowy program, który ma certyfikat CA przechowywany w swoim katalogu bin pod nazwą caCert.cer. Po prostu wyświetla listę wszystkich baz danych istniejących na serwerze MongoDB:

przy użyciu MongoDB.Bson;przy użyciu MongoDB.Driver;przy użyciu System;przy użyciu System.Collections.Generic;przy użyciu System.Linq;przy użyciu System.Net.Security;przy użyciu System.Security.Cryptography.X509Certificates;przy użyciu System.Text;przy użyciu System.Threading.Tasks;namespace TestMongoDB{ class Program { static void Main(string[] args) { var connURL ="mongodb: //admin:@ , :27017/admin?replicaSet= &ssl=true"; var clientSettings =MongoClientSettings.FromUrl(new MongoUrl(connURL)); clientSettings.UseSsl =true; clientSettings.VerifySslCertificate =true; clientSettings.SslSettings =new SslSettings(); clientSettings.SslSettings.SeralidertationCertificateerV =new MongoClient(clientSettings); using (IAsyncCursor cursor =client.ListDatabases()) { while (cursor.MoveNext()) { foreach (var doc in cursor.Current) { Console.WriteLine(doc["nazwa"]); // nazwa bazy danych } } } } private static bool ValidateServerCertficate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors sslPolicyErrors) { bool certMatch =false; // Assume fail switch(sslPolicyErrors.NrorslPolicy) Brak błędów walidacji - akceptacja certyfikatu"); certMatch =true; br eak; case SslPolicyErrors.RemoteCertificateChainErrors:Console.WriteLine("Nie udało się zweryfikować łańcucha certyfikatów. Najprawdopodobniej certyfikat z podpisem własnym"); if (chain.ChainElements.Count ==1 &&chain.ChainStatus[0].Status ==X509ChainStatusFlags.UntrustedRoot) //Jest to certyfikat z podpisem własnym, więc długość łańcucha będzie wynosić 1. { X509Certificate reservedCert =X509Certificate.CreateFromCertFile( "caCert.cer"); if (savedCert.Equals(cert)) //Służy do sprawdzenia zgodności wystawcy i numeru seryjnego. Możesz również użyć skrótu kryptograficznego lub dopasować dwa certyfikaty bajt po bajcie. { Console.WriteLine("Certyfikaty są zgodne"); certMatch =prawda; } } złamać; default:Console.WriteLine("Niezgodność nazwy lub certyfikat zdalny niedostępny. Odrzucanie połączenia"); złamać; } return certMatch; } }}

Rozwiązywanie problemów

Jeśli masz problemy z połączeniem z wdrożeniem MongoDB z obsługą SSL, oto kilka wskazówek dotyczących debugowania:

  • Najpierw sprawdź, czy rzeczywiście możesz połączyć się z serwerem MongoDB z serwera, na którym działa Twoja aplikacja. Najprostszym sposobem na to jest zainstalowanie powłoki mongo na komputerze klienta. W systemie Linux nie musisz instalować całego serwera MongoDB — możesz zainstalować tylko powłokę. Gdy powłoka będzie dostępna, spróbuj użyć „Składni wiersza poleceń”, którą zapewniamy, aby spróbować połączyć się z serwerem.
  • Jeśli nie możesz połączyć się przez powłokę mongo, oznacza to, że komputer klienta nie może połączyć się z portem 27017 serwerów MongoDB. Sprawdź ustawienia swojej grupy bezpieczeństwa, VPC i/lub zapory ScaleGrid, aby upewnić się, że istnieje łączność między komputerami klienckimi i serwerowymi.
  • Jeśli łączność sieciowa jest prawidłowa, następną rzeczą do sprawdzenia jest to, że używasz wersji sterownika MongoDB i .NET Framework, które są kompatybilne z wersją twojego serwera MongoDB.
  • Jeśli potwierdziłeś, że wersje sterowników są poprawne, spróbuj uruchomić przykładowy program w języku C# w trybie debugowania, podobnym do przykładu podanego powyżej. Wykonanie krok po kroku pomogłoby rozwiązać problem.
  • Jeśli nadal masz problemy z połączeniem się z instancją, skontaktuj się z nami pod adresem [email protected], aby uzyskać szczegółowe wyniki powyższych kroków rozwiązywania problemów oraz dokładne wersje C# i sterownika Mongo, których używasz.

Jeśli jesteś nowy w ScaleGrid i chcesz wypróbować ten samouczek, zarejestruj się, aby uzyskać bezpłatną 30-dniową wersję próbną, aby poznać platformę i przetestować łączenie MongoDB z aplikacją C# .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak wstawić wiele dokumentów jednocześnie do MongoDB za pomocą Javy?

  2. Szyfrowanie bazy danych MongoDB

  3. Procent warunków OR dopasowanych w mongodb

  4. zapytanie sql do mongodb?

  5. Wywołaj funkcję zapisaną w mongodb