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=
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.