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

Samopodpisane połączenie SSL za pomocą PyMongo

Istnieją inne sposoby generowania pem serwera/klienta za pomocą urzędu certyfikacji, tj. bez angażowania file.srl , ale ta odpowiedź jest kontynuacją pytania.

Warto wspomnieć, że większość dystrybucji MongoDB v3.0+ zawiera teraz obsługę SSL, pamiętaj, aby wybrać pakiet, który obsługuje SSL. Poniższy przykład jest testowany z MongoDB v3.2 na Ubuntu Linux 14.04 z PyMongo v3.2.1. Gdzie pojedyncza maszyna wygenerowała pliki pem urzędu certyfikacji, serwera i klienta w celach demonstracyjnych.

Wygenerujmy ca.pem i privkey.pem . Struktura tematu to /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]"

Wygeneruj server .pem plik:

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

Chociaż możesz użyć adresu IP jako CN wartość, nie jest to zalecane. Zobacz RFC-6125.

Teraz wygenerujmy client.pem plik:

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

Po wygenerowaniu pliku .pem plików, teraz możesz uruchomić mongod. na przykład:

mongod --sslMode requireSSL --sslPEMKeyFile ~/server.pem --sslCAFile ~/ca.pem

Możesz przetestować połączenie za pomocą powłoki mongo, na przykład:

mongo --ssl --sslPEMKeyFile ~/client.pem --sslCAFile ~/ca.pem --host <server hostname>

Po pomyślnym nawiązaniu połączenia możesz spróbować z PyMongo. Na przykład:

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'
 )

Alternatywnie możesz również użyć mongod flag --sslAllowInvalidHostnames do określenia localhost itp.

Do użytku produkcyjnego wdrożenie MongoDB powinno używać prawidłowych certyfikatów wygenerowanych i podpisanych przez jeden urząd certyfikacji. Jeśli używasz certyfikatu z podpisem własnym, mimo że kanał komunikacji będzie szyfrowany, nie będzie weryfikacji tożsamości serwera. Korzystanie z certyfikatu podpisanego przez zaufany urząd certyfikacji umożliwi sterownikom MongoDB weryfikację tożsamości serwera. Ogólnie rzecz biorąc, unikaj używania certyfikatów z podpisem własnym, chyba że sieć jest zaufana.

Inne powiązane linki, które mogą Ci się przydać:

  • MongoDB:Skonfiguruj SSL.
  • MongoDB:samouczki dotyczące bezpieczeństwa.
  • Lista kontrolna bezpieczeństwa MongoDB.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Automatycznie przedawniaj dokumenty kolekcji MongoDB

  2. Nie można uruchomić MongoDB jako usługi

  3. Max i min w mongodb

  4. Jak dodać dane do tablicy w schemacie Mongoose?

  5. Tworzenie relacji klucza obcego w Mongoose