sql >> Databáze >  >> NoSQL >> MongoDB

SSL připojení s vlastním podpisem pomocí PyMongo

Existují další způsoby, jak generovat server/klient Pem s certifikační autoritou, tj. bez použití file.srl , ale tato odpověď navazuje na otázku.

Za zmínku stojí, že většina distribucí MongoDB v3.0+ nyní zahrnuje podporu pro SSL, nezapomeňte si vybrat balíček, který podporuje SSL. Níže uvedený příklad je testován s MongoDB v3.2 na Ubuntu Linux 14.04 s PyMongo v3.2.1. Kde jeden počítač vygeneroval soubory CA, server a klient Pem pro účely demonstrace.

Vygenerujeme ca.pem a privkey.pem . Předmětová struktura je /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]"

Vygenerujte server .pem soubor:

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

I když můžete použít IP adresu jako CN hodnotu také nedoporučujeme. Viz RFC-6125.

Nyní vygenerujeme client.pem soubor:

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 vygenerování .pem souborů, nyní můžete spustit mongod. například:

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

Spojení můžete otestovat pomocí mongo shellu, například:

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

Jakmile se vám podaří úspěšně připojit, můžete to zkusit s PyMongem. Například:

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

Případně můžete také použít mongod příznak --sslAllowInvalidHostnames k určení localhost , atd.

Pro produkční použití by vaše nasazení MongoDB mělo používat platné certifikáty vygenerované a podepsané jedinou certifikační autoritou. Pokud použijete certifikát podepsaný svým držitelem, ačkoli komunikační kanál bude zašifrován, nedojde k ověření identity serveru. Použití certifikátu podepsaného důvěryhodnou certifikační autoritou umožní ovladačům MongoDB ověřit identitu serveru. Obecně se vyhněte používání certifikátů s vlastním podpisem, pokud není síť důvěryhodná.

Další související odkazy, které se vám mohou hodit:

  • MongoDB:Nakonfigurujte SSL.
  • MongoDB:Výukové programy zabezpečení.
  • Kontrolní seznam zabezpečení MongoDB.



  1. provedení příkazu redis eval ke spuštění skriptu Lua v nodeJS

  2. Aktualizace/upsert Mongoose?

  3. Index v poli ts v oplog.rs není aktualizován

  4. 8 způsobů, jak získat den z rande v MongoDB