Zoeken…


Invoering

Hoe een ReplicaSet te configureren om TLS / SSL te ondersteunen?

We zullen een 3 Nodes ReplicaSet in uw lokale omgeving implementeren en we zullen een zelfondertekend certificaat gebruiken. Gebruik geen zelfondertekend certificaat in PRODUCTION.

Hoe verbindt u uw client met deze ReplicaSet?

We zullen een Mongo Shell aansluiten.

Een beschrijving van TLS / SSL, PKI (Public Key Infrastructure) -certificaten en certificaatautoriteit valt buiten het bestek van deze documentatie.

Hoe een ReplicaSet te configureren om TLS / SSL te ondersteunen?

Maak het rootcertificaat

Het basiscertificaat (ook wel CA-bestand genoemd) wordt gebruikt om uw certificaat te ondertekenen en te identificeren. Voer het onderstaande commando uit om het te genereren.

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

Bewaar het rootcertificaat en de bijbehorende sleutel zorgvuldig, beide worden gebruikt om uw certificaten te ondertekenen. Het rootcertificaat kan ook door uw client worden gebruikt.


Genereer de certificaatverzoeken en de privésleutels

Bij het genereren van het Certificate Signing Request (ook wel CSR genoemd), voert u de exacte hostnaam (of IP) van uw knooppunt in het veld Common Name (ook wel CN) in. De andere velden moeten exact dezelfde waarde hebben. Mogelijk moet u uw bestand / etc / hosts aanpassen.

De onderstaande opdrachten genereren de CSR-bestanden en de RSA Private Keys (4096 bits).

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

U moet één CSR genereren voor elk knooppunt van uw ReplicaSet. Onthoud dat de algemene naam niet hetzelfde is van het ene knooppunt naar het andere. Baseer niet meerdere CSR's op dezelfde privésleutel.

U moet nu 3 CSR's en 3 privésleutels hebben.

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

Onderteken uw certificaataanvragen

Gebruik het CA-bestand (ca. pem) en de eerder gegenereerde privésleutel (ca. sleutel) om elk certificaatverzoek te ondertekenen door de onderstaande opdrachten uit te voeren.

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

U moet elke CSR ondertekenen.

U moet nu 3 CSR's, 3 privésleutels en 3 zelfondertekende certificaten hebben. Alleen de privésleutels en de certificaten worden gebruikt door 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

Elk certificaat komt overeen met één knooppunt. Onthoud zorgvuldig welke CN / hostnaam u aan elke CSR hebt gegeven.


Bevestig elk knooppuntcertificaat met zijn sleutel

Voer de onderstaande opdrachten uit om elk knooppuntcertificaat samen te voegen met de sleutel in één bestand (vereiste MongoDB).

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

Je moet nu 3 PEM-bestanden hebben.

mongodb_node_1.pem - mongodb_node_2.pem - mongodb_node_3.pem

Implementeer uw ReplicaSet

We gaan ervan uit dat uw pem-bestanden zich in uw huidige map bevinden, evenals data / data1, data / data2 en data / data3.

Voer de onderstaande opdrachten uit om uw 3 Nodes ReplicaSet te luisteren op poort 27017, 27018 en 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

U hebt nu een ReplicaSet met 3 knooppunten geïmplementeerd op uw lokale omgeving en al hun transacties zijn gecodeerd. U kunt geen verbinding maken met deze ReplicaSet zonder TLS te gebruiken.

Implementeer uw ReplicaSet voor wederzijds SSL / wederzijds vertrouwen

Om uw client te dwingen een clientcertificaat (wederzijdse SSL) te verstrekken, moet u het CA-bestand toevoegen wanneer u uw instanties uitvoert.

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

U hebt nu een ReplicaSet met 3 knooppunten geïmplementeerd op uw lokale omgeving en al hun transacties zijn gecodeerd. U kunt geen verbinding maken met deze ReplicaSet zonder TLS te gebruiken of zonder een clientcertificaat te bieden dat wordt vertrouwd door uw CA.

Hoe verbindt u uw client (Mongo Shell) met een ReplicaSet?

Geen wederzijdse SSL

In dit voorbeeld kunnen we het CA-bestand (ca.pem) gebruiken dat u hebt gegenereerd in de sectie ' Hoe een ReplicaSet configureren om TLS / SSL te ondersteunen? '. We gaan ervan uit dat het CA-bestand zich in uw huidige map bevindt.

We nemen aan dat uw 3 knooppunten op mongo1: 27017, mongo2: 27018 en mongo3: 27019 draaien. (Mogelijk moet u uw bestand / etc / hosts aanpassen.)

Van MongoDB 3.2.6 kunt u, als uw CA-bestand is geregistreerd in uw Trust Store voor besturingssysteem, verbinding maken met uw ReplicaSet zonder het CA-bestand te verstrekken.

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

Anders moet u het CA-bestand opgeven.

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

U bent nu verbonden met uw ReplicaSet en alle transacties tussen uw Mongo Shell en uw ReplicaSet zijn gecodeerd.

Met wederzijdse SSL

Als uw ReplicaSet om een clientcertificaat vraagt, moet u een certificaat opgeven dat is ondertekend door de CA die wordt gebruikt door de ReplicaSet-implementatie. De stappen voor het genereren van het clientcertificaat zijn bijna hetzelfde als die voor het genereren van het servercertificaat.

Inderdaad, u hoeft alleen het veld Gemeenschappelijke naam te wijzigen tijdens het maken van CSR. In plaats van 1 knooppunt-hostnaam in het veld Gemeenschappelijke naam op te geven , moet u alle ReplicaSet-hostnamen opgeven, gescheiden door een 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

U kunt geconfronteerd worden met de beperking van de algemene naam als het veld Gemeenschappelijke naam te lang is (meer dan 64 bytes lang). Om deze beperking te omzeilen, moet u de SubjectAltName gebruiken bij het genereren van de 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
)

Vervolgens ondertekent u de CSR met behulp van het CA-certificaat en de sleutel.

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

Ten slotte concateert u de sleutel en het ondertekende certificaat.

cat mongodb_client.key mongodb_client.crt > mongodb_client.pem

Om verbinding te maken met uw ReplicaSet, kunt u nu het nieuw gegenereerde clientcertificaat verstrekken.

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

U bent nu verbonden met uw ReplicaSet en alle transacties tussen uw Mongo Shell en uw ReplicaSet zijn gecodeerd.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow