Suche…


Einführung

Wie konfiguriere ich ein ReplicaSet zur Unterstützung von TLS / SSL?

Wir werden ein ReplicaSet mit 3 Knoten in Ihrer lokalen Umgebung bereitstellen und ein selbstsigniertes Zertifikat verwenden. Verwenden Sie kein selbstsigniertes Zertifikat in PRODUCTION.

Wie verbinden Sie Ihren Client mit diesem ReplicaSet?

Wir werden eine Mongo-Shell anschließen.

Eine Beschreibung von TLS / SSL-, PKI-Zertifikaten (Public Key Infrastructure) und der Zertifizierungsstelle geht über den Umfang dieser Dokumentation hinaus.

Wie konfiguriere ich ein ReplicaSet zur Unterstützung von TLS / SSL?

Erstellen Sie das Stammzertifikat

Das Stammzertifikat (auch als CA-Datei bezeichnet) wird zum Signieren und Identifizieren Ihres Zertifikats verwendet. Führen Sie den folgenden Befehl aus, um es zu generieren.

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

Bewahren Sie das Stammzertifikat und seinen Schlüssel sorgfältig auf. Beide werden zum Signieren Ihrer Zertifikate verwendet. Das Stammzertifikat wird möglicherweise auch von Ihrem Client verwendet.


Generieren Sie die Zertifikatsanforderungen und die privaten Schlüssel

Geben Sie beim Generieren der Zertifikatsignierungsanforderung (aka CSR) den genauen Hostnamen (oder die IP-Adresse) Ihres Knotens in das Feld Common Name (auch CN) ein. Die anderen Felder müssen exakt denselben Wert haben. Möglicherweise müssen Sie Ihre Datei / etc / hosts ändern.

Mit den folgenden Befehlen werden die CSR-Dateien und die privaten RSA-Schlüssel (4096 Bit) generiert.

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

Sie müssen eine CSR für jeden Knoten Ihres ReplicaSet generieren. Denken Sie daran, dass der allgemeine Name von Knoten zu Knoten nicht identisch ist. Basis mehrerer CSRs nicht auf demselben privaten Schlüssel.

Sie müssen jetzt 3 CSRs und 3 private Schlüssel haben.

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

Unterschreiben Sie Ihre Zertifikatsanfragen

Verwenden Sie die zuvor generierte CA-Datei (ca.pem) und ihren privaten Schlüssel (ca.key), um jede Zertifikatsanforderung zu signieren, indem Sie die folgenden Befehle ausführen.

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

Sie müssen jede CSR unterzeichnen.

Sie müssen jetzt über 3 CSRs, 3 private Schlüssel und 3 selbstsignierte Zertifikate verfügen. Nur die privaten Schlüssel und die Zertifikate werden von MongoDB verwendet.

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

Jedes Zertifikat entspricht einem Knoten. Erinnern Sie sich sorgfältig, welchen CN / Hostnamen Sie für jede CSR angegeben haben.


Concat jedes Knoten-Zertifikat mit seinem Schlüssel

Führen Sie die folgenden Befehle aus, um jedes Knotenzertifikat mit seinem Schlüssel in einer Datei zusammenzufassen (MongoDB-Anforderung).

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

Ihr muss jetzt 3 PEM-Dateien haben.

mongodb_node_1.pem - mongodb_node_2.pem - mongodb_node_3.pem

Stellen Sie Ihr ReplicaSet bereit

Wir gehen davon aus, dass sich Ihre PEM-Dateien in Ihrem aktuellen Ordner befinden sowie Daten / Daten1, Daten / Daten2 und Daten / Daten3.

Führen Sie die folgenden Befehle aus, um Ihre 3 Nodes ReplicaSet-Überwachung auf Port 27017, 27018 und 27019 bereitzustellen.

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

Sie haben jetzt einen ReplicaSet mit 3 Knoten, der in Ihrer lokalen Umgebung bereitgestellt wird, und alle ihre Transaktionen werden verschlüsselt. Sie können keine Verbindung zu diesem ReplicaSet herstellen, ohne TLS zu verwenden.

Stellen Sie Ihr ReplicaSet für gegenseitiges SSL / gegenseitiges Vertrauen bereit

Um den Client zur Bereitstellung eines Client-Zertifikats (Gegenseitiges SSL) zu zwingen, müssen Sie die CA-Datei hinzufügen, wenn Sie Ihre Instanzen ausführen.

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

Sie haben jetzt einen ReplicaSet mit 3 Knoten, der in Ihrer lokalen Umgebung bereitgestellt wird, und alle ihre Transaktionen werden verschlüsselt. Sie können keine Verbindung zu diesem ReplicaSet herstellen, ohne TLS zu verwenden oder ein von Ihrer Zertifizierungsstelle vertrauenswürdiges Clientzertifikat bereitzustellen.

Wie verbinden Sie Ihren Client (Mongo Shell) mit einem ReplicaSet?

Kein gegenseitiges SSL

In diesem Beispiel verwenden wir möglicherweise die CA-Datei (ca.pem), die Sie im Abschnitt " So konfigurieren Sie ein ReplicaSet zur Unterstützung von TLS / SSL? " Generiert haben . Wir gehen davon aus, dass sich die CA-Datei in Ihrem aktuellen Ordner befindet.

Wir gehen davon aus, dass Ihre 3 Knoten auf Mongo1: 27017, Mongo2: 27018 und Mongo3: 27019 laufen. (Möglicherweise müssen Sie Ihre Datei / etc / hosts ändern.)

Wenn Ihre CA-Datei in MongoDB 3.2.6 im Trust Store des Betriebssystems registriert ist, können Sie eine Verbindung zu Ihrem ReplicaSet herstellen, ohne die CA-Datei bereitzustellen.

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

Andernfalls müssen Sie die CA-Datei bereitstellen.

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

Sie sind jetzt mit Ihrem ReplicaSet verbunden und alle Transaktionen zwischen Ihrer Mongo Shell und Ihrem ReplicaSet sind verschlüsselt.

Mit gegenseitigem SSL

Wenn Ihr ReplicaSet ein Client-Zertifikat verlangt, müssen Sie ein von der Zertifizierungsstelle signiertes Zertifikat bereitstellen, die von der ReplicaSet-Bereitstellung verwendet wird. Die Schritte zum Generieren des Client-Zertifikats sind fast identisch mit denen zum Generieren des Server-Zertifikats.

Sie müssen lediglich das Feld für den allgemeinen Namen während der CSR-Erstellung ändern. Anstelle eines Hostnamens mit einem Knoten im Feld "Allgemeiner Name" müssen Sie alle durch Kommas getrennten ReplicaSet-Hostnamen angeben .

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

Wenn das Feld Common Name zu lang ist (mehr als 64 Byte), kann die Größenbeschränkung für Common Name auftreten. Um diese Einschränkung zu umgehen, müssen Sie beim Generieren der CSR den SubjectAltName verwenden.

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
)

Dann signieren Sie die CSR mit dem CA-Zertifikat und dem Schlüssel.

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

Zum Schluss legen Sie den Schlüssel und das signierte Zertifikat fest.

cat mongodb_client.key mongodb_client.crt > mongodb_client.pem

Um eine Verbindung zu Ihrem ReplicaSet herzustellen, können Sie jetzt das neu generierte Clientzertifikat bereitstellen.

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

Sie sind jetzt mit Ihrem ReplicaSet verbunden und alle Transaktionen zwischen Ihrer Mongo Shell und Ihrem ReplicaSet sind verschlüsselt.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow