sql >> Database >  >> NoSQL >> MongoDB

Zelfondertekende SSL-verbinding met PyMongo

Er zijn andere manieren om server/client pem te genereren met een certificeringsinstantie, d.w.z. zonder tussenkomst van file.srl , maar dit antwoord is een vervolg op de vraag.

Vermeldenswaard is dat de meeste MongoDB v3.0+ distributies nu ondersteuning voor SSL bevatten. Zorg ervoor dat u een pakket kiest dat SSL ondersteunt. Het onderstaande voorbeeld is getest met MongoDB v3.2 op Ubuntu Linux 14.04 met PyMongo v3.2.1. Waar een enkele machine de CA-, server- en clientpem-bestanden voor demonstratiedoeleinden heeft gegenereerd.

Laten we ca.pem . genereren en privkey.pem . De onderwerpstructuur is /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]"

Genereer server .pem bestand:

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

Hoewel u het IP-adres kunt gebruiken als CN waarde ook, het wordt niet aanbevolen. Zie RFC-6125.

Laten we nu client.pem genereren bestand:

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

Na het genereren van de .pem bestanden, kunt u nu mongod uitvoeren. bijvoorbeeld:

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

U kunt de verbinding testen met behulp van de mongo-shell, bijvoorbeeld:

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

Zodra u succesvol verbinding kunt maken, kunt u het proberen met PyMongo. Bijvoorbeeld:

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

Als alternatief kunt u ook mongod . gebruiken vlag --sslAllowInvalidHostnames om localhost op te geven , enz.

Voor productiegebruik moet uw MongoDB-implementatie geldige certificaten gebruiken die zijn gegenereerd en ondertekend door een enkele certificeringsinstantie. Als u een zelfondertekend certificaat gebruikt, vindt er geen validatie van de serveridentiteit plaats, hoewel het communicatiekanaal wordt versleuteld. Door een certificaat te gebruiken dat is ondertekend door een vertrouwde certificeringsinstantie, kunnen MongoDB-stuurprogramma's de identiteit van de server verifiëren. Vermijd in het algemeen het gebruik van zelfondertekende certificaten, tenzij het netwerk wordt vertrouwd.

Andere gerelateerde links die u wellicht nuttig vindt:

  • MongoDB:SSL configureren.
  • MongoDB:beveiligingshandleidingen.
  • MongoDB-beveiligingschecklist.



  1. Aantal verlopen sleutels vermeld door info-opdracht op redis-slave komt niet overeen met wat ik zie

  2. afsluiten redis-server vanaf de opdrachtregel

  3. Hoe in productie te gaan met MongoDB - Top tien tips

  4. MongoDB-aggregatie met som van arraywaarden