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