sql >> Databasteknik >  >> NoSQL >> MongoDB

Självsignerad SSL-anslutning med PyMongo

Det finns andra sätt att generera server/klient Pem med en certifikatutfärdare, dvs utan att involvera file.srl , men det här svaret är för att följa upp frågan.

Värt att nämna att de flesta MongoDB v3.0+-distributioner nu inkluderar stöd för SSL, se till att välja ett paket som stöder SSL. Exemplet nedan är testat med MongoDB v3.2 på Ubuntu Linux 14.04 med PyMongo v3.2.1. Där en enda maskin genererade CA-, server- och klientpem-filerna för demonstrationsändamål.

Låt oss skapa ca.pem och privkey.pem . Ämnesstrukturen är /C=/ST=/L=/O=/emailAddress=/CN= .

mkdir ~/ssl
cd ~/ssl
openssl req -out ca.pem -new -x509 -days 3650 -subj "/C=AU/ST=NSW/O=Organisation/CN=root/[email protected]"

Generera server .pem fil:

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

Även om du kan använda IP-adress som CN värde också, det rekommenderas inte. Se RFC-6125.

Låt oss nu skapa client.pem fil:

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

Efter att ha genererat .pem filer, nu kan du köra mongod. till exempel:

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

Du kan testa anslutningen med mongo-skalet, till exempel:

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

När du väl kan ansluta dig kan du prova med PyMongo. Till exempel:

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

Alternativt kan du också använda mongod flagga --sslAllowInvalidHostnames för att ange localhost , etc.

För produktionsanvändning bör din MongoDB-distribution använda giltiga certifikat genererade och signerade av en enda certifikatutfärdare. Om du använder ett självsignerat certifikat, även om kommunikationskanalen kommer att vara krypterad, kommer det inte att finnas någon validering av serveridentitet. Genom att använda ett certifikat som är signerat av en betrodd certifikatutfärdare kan MongoDB-drivrutiner verifiera serverns identitet. Undvik i allmänhet att använda självsignerade certifikat om inte nätverket är pålitligt.

Andra relaterade länkar som du kan ha nytta av:

  • MongoDB:Konfigurera SSL.
  • MongoDB:Säkerhetsstudier.
  • MongoDB säkerhetschecklista.



  1. Fem tips för bättre MongoDB-värd på Azure

  2. MongoDB forEach()

  3. SignalR kan inte ansluta till Azure Redis på SSL

  4. Kollisionssannolikhet för ObjectId vs UUID i ett stort distribuerat system