Sök…


Introduktion

Hur konfigurerar jag en ReplicaSet för att stödja TLS / SSL?

Vi kommer att distribuera en 3 Nodes ReplicaSet i din lokala miljö och vi kommer att använda ett självsignerat certifikat. Använd inte ett självsignerat certifikat i PRODUCTION.

Hur ansluter du din klient till denna ReplicaSet?

Vi kommer att ansluta en Mongo-skal.

En beskrivning av TLS / SSL, PKI (Public Key Infrastructure) -certifikat och Certificate Authority ligger utanför ramen för denna dokumentation.

Hur konfigurerar jag en ReplicaSet för att stödja TLS / SSL?

Skapa rotcertifikatet

Root Certificate (aka CA File) kommer att användas för att signera och identifiera ditt certifikat. Kör kommandot nedan för att generera det.

openssl req -nodes -out ca.pem -new -x509 -keyout ca.key

Förvara rotcertifikatet och dess nyckel noggrant, båda kommer att användas för att underteckna dina certifikat. Rotcertifikatet kan också användas av din klient.


Generera certifikatbegäranden och de privata nycklarna

När du genererar certifikatsigneringsbegäran (alias CSR) anger du det exakta värdnamnet (eller IP) för din nod i fältet Common Name (aka CN). De andra fälten måste ha exakt samma värde. Du kan behöva ändra din / etc / hosts- fil.

Kommandona nedan genererar CSR-filer och RSA-privata nycklar (4096 bitar).

openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_node_1.key -out mongodb_node_1.csr
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_node_2.key -out mongodb_node_2.csr
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_node_3.key -out mongodb_node_3.csr

Du måste generera en CSR för varje nod i din ReplicaSet. Kom ihåg att det vanliga namnet inte är detsamma från en nod till en annan. Basera inte flera CSR: er på samma privata nyckel.

Du måste nu ha 3 CSR: er och 3 privata nycklar.

mongodb_node_1.key - mongodb_node_2.key - mongodb_node_3.key
mongodb_node_1.csr - mongodb_node_2.csr - mongodb_node_3.csr

Underteckna dina certifikatbegäranden

Använd CA-filen (ca.pem) och dess privata nyckel (ca. nyckel) som genererats tidigare för att underteckna varje certifikatbegäran genom att köra kommandona nedan.

openssl x509 -req -in mongodb_node_1.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_node_1.crt
openssl x509 -req -in mongodb_node_2.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_node_2.crt
openssl x509 -req -in mongodb_node_3.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_node_3.crt

Du måste skriva under varje CSR.

Nu måste du ha 3 CSR: er, 3 privata nycklar och 3 självsignerade certifikat. Endast de privata nycklarna och certifikaten kommer att användas av MongoDB.

mongodb_node_1.key - mongodb_node_2.key - mongodb_node_3.key
mongodb_node_1.csr - mongodb_node_2.csr - mongodb_node_3.csr
mongodb_node_1.crt - mongodb_node_2.crt - mongodb_node_3.crt

Varje certifikat motsvarar en nod. Kom ihåg noggrant vilket CN / värdnamn du gav till varje CSR.


Concatera varje nodcertifikat med dess nyckel

Kör kommandona nedan för att concatera varje nodcertifikat med dess nyckel i en fil (MongoDB-krav).

cat mongodb_node_1.key mongodb_node_1.crt > mongodb_node_1.pem
cat mongodb_node_2.key mongodb_node_2.crt > mongodb_node_2.pem
cat mongodb_node_3.key mongodb_node_3.crt > mongodb_node_3.pem

Nu måste du ha 3 PEM-filer.

mongodb_node_1.pem - mongodb_node_2.pem - mongodb_node_3.pem

Distribuera din ReplicaSet

Vi antar att dina pemfiler finns i din nuvarande mapp samt data / data1, data / data2 och data / data3.

Kör kommandona nedan för att distribuera dina 3 Noder ReplicaSet-lyssnande på port 27017, 27018 och 27019.

mongod --dbpath data/data_1 --replSet rs0 --port 27017 --sslMode requireSSL --sslPEMKeyFile mongodb_node_1.pem
mongod --dbpath data/data_2 --replSet rs0 --port 27018 --sslMode requireSSL --sslPEMKeyFile mongodb_node_2.pem
mongod --dbpath data/data_3 --replSet rs0 --port 27019 --sslMode requireSSL --sslPEMKeyFile mongodb_node_3.pem

Du har nu en 3 Noder ReplicaSet distribuerad i din lokala miljö och alla deras transaktioner är krypterade. Du kan inte ansluta till denna ReplicaSet utan att använda TLS.

Distribuera din ReplicaSet för ömsesidigt SSL / ömsesidigt förtroende

För att tvinga din klient att tillhandahålla ett klientcertifikat (ömsesidig SSL) måste du lägga till CA-filen när du kör dina instanser.

mongod --dbpath data/data_1 --replSet rs0 --port 27017 --sslMode requireSSL --sslPEMKeyFile mongodb_node_1.pem --sslCAFile ca.pem
mongod --dbpath data/data_2 --replSet rs0 --port 27018 --sslMode requireSSL --sslPEMKeyFile mongodb_node_2.pem --sslCAFile ca.pem
mongod --dbpath data/data_3 --replSet rs0 --port 27019 --sslMode requireSSL --sslPEMKeyFile mongodb_node_3.pem --sslCAFile ca.pem

Du har nu en 3 Noder ReplicaSet distribuerad i din lokala miljö och alla deras transaktioner är krypterade. Du kan inte ansluta till denna ReplicaSet utan att använda TLS eller utan att tillhandahålla ett klientcertifikat som din CA har förtroende.

Hur ansluter du din klient (Mongo Shell) till en ReplicaSet?

Ingen ömsesidig SSL

I det här exemplet kan vi använda CA-filen (ca. pem) som du genererade under avsnittet " Hur man konfigurerar en ReplicaSet för att stödja TLS / SSL? ". Vi antar att CA-filen finns i din nuvarande mapp.

Vi antar att dina 3 noder körs på mongo1: 27017, mongo2: 27018 och mongo3: 27019. (Du kanske måste ändra din / etc / hosts- fil.)

Från MongoDB 3.2.6, om din CA-fil är registrerad i ditt operativsystem Trust Store, kan du ansluta till din ReplicaSet utan att ange CA-filen.

mongo --ssl --host rs0/mongo1:27017,mongo2:27018,mongo3:27019

Annars måste du ange CA-filen.

mongo --ssl --sslCAFile ca.pem --host rs0/mongo1:27017,mongo2:27018,mongo3:27019

Du är nu ansluten till din ReplicaSet och alla transaktioner mellan din Mongo Shell och din ReplicaSet är krypterade.

Med ömsesidigt SSL

Om din ReplicaSet ber om ett klientcertifikat måste du ange ett som är signerat av CA som används av ReplicaSet-distribueringen. Stegen för att generera klientcertifikatet är nästan samma som de som skapar servercertifikatet.

Du behöver faktiskt bara ändra fältet Common Name under skapandet av CSR. Istället för att tillhandahålla 1 nodvärdnamn i fältet Common Name måste du ange alla ReplicaSet-värdsnamn som är separerade med ett komma .

openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_client.key -out mongodb_client.csr
...
Common Name (e.g. server FQDN or YOUR name) []: mongo1,mongo2,mongo3

Du kan möta storleksbegränsningen för Common Name om fältet Common Name är för långt (mer än 64 byte långt). För att kringgå denna begränsning måste du använda SubjectAltName när du genererar CSR.

openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_client.key -out mongodb_client.csr -config <(
cat <<-EOF
[req]
default_bits = 4096
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
 
[ dn ]
CN = .
 
[ req_ext ]
subjectAltName = @alt_names
 
[ alt_names ]
DNS.1 = mongo1
DNS.2 = mongo2
DNS.3 = mongo3
EOF
)

Sedan signerar du CSR med CA-certifikatet och nyckeln.

openssl x509 -req -in mongodb_client.csr  -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_client.crt

Slutligen samlar du nyckeln och det signerade certifikatet.

cat mongodb_client.key mongodb_client.crt > mongodb_client.pem

För att ansluta till din ReplicaSet kan du nu tillhandahålla det nyligen genererade klientcertifikatet.

mongo --ssl --sslCAFile ca.pem --host rs0/mongo1:27017,mongo2:27018,mongo3:27019 --sslPEMKeyFile mongodb_client.pem

Du är nu ansluten till din ReplicaSet och alla transaktioner mellan din Mongo Shell och din ReplicaSet är krypterade.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow