Die Verbindung zu MongoDB über SSL mit Node.js
Wie kann ich eine Verbindung zu einer MongoDB-server über SSL verwenden Node.js?
Ich habe gelesen, die Quellen von ein paar Fahrern (mongojs, mongodb-native) und ich war schon googeln eine Weile jetzt, aber kann nicht scheinen zu finden, keine richtigen tutorials, guides oder docs.
- Die 2. Folge für
mongodb ssl node.js
die Sie interessieren könnten mongodb.github.io/node-mongodb-native/api-generated/server.html - Hm.. ich begann herumalbern mit, dass, aber es nicht zu funktionieren. Ich werde es neu versuchen.
- Und der moderator, die abgestimmt haben, zu schließen: wirklich? Wie wird dieses nicht über die Programmierung? Lasst uns einfach schreiben Sie niemals code, der Verbindung zu Datenbanken dann.
- Mögliche Duplikate von MongoDb und nodejs SSl/Sichere Verbindung
- Es ist sicher ein Duplikat, wenn die andere Frage, die gefragt wurde, später... Dumm mich für die Veröffentlichung einer neuen Frage, wenn es ging, gefragt zu werden 7 Monate später von jemand anderem! 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schritt 1: Beziehen Von MongoDB 3.0
Das erste, was Sie wissen müssen, ist, dass das SSL wird nur unterstützt out-of-the-box von MongoDB 3.0 und höher. Ubuntu muss nicht 3.0 in den Standard-repositories, also hier ist, wie Sie es bekommen:
3.0.7 ist die aktuelle stabile version als jetzt, aber fühlen Sie sich frei zu ersetzen 3.0.7 mit Ihrem Lieblings-release.
Schritt 2: Erhalten Sie den Privaten Schlüssel, das Zertifikat, und PEM-Dateien
PEM enthält einen Public-Key-Zertifikat und den zugehörigen Privaten Schlüssel. Diese Dateien können entweder die mit IRL-Dollar aus einem Zertifikat Authroity oder generiert mit OpenSSL wie folgt:
mongodb.pem verwendet werden, da die PEM-Datei, mongodb-cert.key ist der Private Schlüssel-Datei, und mongodb-cert.crt-Zertifikat-Datei, die kann auch verwendet werden, wie Sie die CA-Datei. SIE MÜSSEN ALLE DREI VON DIESEN.
Schritt 3: Konfigurieren MongoD
Wir gehen davon aus, dass Sie kopiert diese Dateien in /etc/ssl/Ordner, wo Sie hingehören. Jetzt öffnen wir unsere MongoDB config-Datei:
und ändern Sie die "# Netzwerk-Schnittstellen" etwa so:
BITTE BEACHTEN Sie: wir sind auskommentieren bindIp. DIES ERMÖGLICHT EXTERNE VERBINDUNGEN, um Zugang zu Ihren Mongo Datenbank. Wir gehen davon aus, dass dies Ihr Ende Ziel (Warum sollte dein verschlüsseln von Daten auf localhost?), aber Sie sollten dies nur tun, NACH dem einrichten von Autorisierungsregeln für Ihre MongoDB-server.
Den CAFile ist auch auskommentiert, da es optional ist. Ich werde erklären, wie Sie zum einrichten der Zertifizierungsstelle Vertrauen, die am Ende von diesem post.
Wie immer, Sie müssen neu starten, MongoDB, bevor config-Datei änderungen wirksam werden:
HABEN IHRE SERVER NICHT GESTARTET? Sie sind auf Ihre eigene, aber es ist wahrscheinlich ein Problem mit Ihrem Zertifikat-Dateien. Sie können prüfen, start-up-Fehler durch ausführen mongod manuell:
Schritt 4: Testen Sie Ihr server-Einstellungen
Bevor wir gehen, messing mit Knoten-Konfigurationen, lassen Sie uns sicherstellen, dass Ihre server-setup ordnungsgemäß funktioniert, indem Sie die Verbindung mit dem mongo command line client:
Es sei denn, der domain-name auf dem Zertifikat ist 127.0.0.1 oder localhost, die --sslAllowInvalidHostnames-flag ist erforderlich. Ohne Sie, werden Sie wahrscheinlich diese Fehlermeldung erhalten:
Schritt 5) Konfigurieren Node.JS /Mungo
Wenn Sie die Knoten-mongodb-native Paket in der Knoten-Anwendung sofort stoppen und starten Sie mit Mungo. Es ist nicht so schwer. Das heißt, Mungo.connect() hat nahezu die gleiche API wie mongodb.connect(), so ersetzen Sie Sie entsprechend.
Schritt 6) [Optional] überprüfen Sie Ihre Zertifikate über eine Certificate Authority
Zur Validierung von SSL-Zertifikaten benötigen Sie eine ZERTIFIZIERUNGSSTELLE (oder das bundle) - Datei von Ihrer Zertifizierungsstelle. Dies sieht viel wie Ihre Zertifikat-Datei, sondern enthalten Häufig mehrere Zertifikate (die form achain-of-trust zu überprüfen, ob ein Zertifikat gültig ist). Wenn Sie ein selbst-signiertes Zertifikat verwenden, können Sie Ihre mongodb-cert.crt als eine CA-Datei.
Werden Sie auch brauchen, um sicherzustellen, dass Ihre MongoDB-server-Hostnamen übereinstimmt, die verwendet, um das Zertifikat zu erstellen.
Schritt 6.3) Aktualisieren Sie Ihre mongod-Konfiguration
und ändern Sie die "# Netzwerk-Schnittstellen" etwa so:
Schritt 6.4) Testen Sie die server-Einstellungen
Mongo-Clients kann in der CA-Datei, um zu überprüfen, dass Sie sprechen, auf den richtigen server. Dies geschieht mit der Option --sslCAFile parameter
Mongo-Server konfiguriert, mit einem CAFile verlangen, dass clients, die im Besitz eines gültigen Zertifikats UND den Privaten Schlüssel für den server. In der mongo-shell-client, dies geschieht, indem in der --sslPEMKeyFile parameter.
Ohne eine PEM-Datei (enthält das Zertifikat des Servers), können Sie diese Fehlermeldung sehen:
Kann der server so konfiguriert, dass Anfragen von Kunden ohne eine PEM-Datei durch das aktivieren net.ssl.weakCertificateValidation, Sie aber eine Schwächung Ihrer Sicherheit für keine wirkliche Verstärkung.
Schritt 6.5) Konfigurieren Node.JS /Mungo
Gibt es ein paar Fallstricke, die hier, so mit mir tragen.
Ersten, MÜSSEN Sie Knoten-mongodb-native 2.0 oder höher. Wenn Sie mit Mungo, dann MÜSSEN Sie Mungo 4.0 oder höher. Vorherige Mungo-Versionen verwenden Knoten-mongodb-native-1.* die nicht-Unterstützung der Zertifikatsprüfung in welcher Eigenschaft auch immer.
Zweitens, es gibt keine sslAllowInvalidHostnames oder ähnliche option in den Knoten-mongodb-native. Dies ist nicht etwas, das Knoten-mongodb-Entwickler systemeigene beheben können (hätte ich bereits), da die native TLS-Bibliothek zur Verfügung, die in Knoten 0.10.* bietet keine option für diese. Im Knoten 4.* und 5.*, es ist ein checkServerIdentity option, die eine Hoffnung, aber den Wechsel von der ursprünglichen Knoten-Zweig zu Zweig nach dem io.js merge verursachen können, ein bisschen Kopfschmerzen und die aktuelle Zeit.
Also lasst uns versuchen, diese:
Wenn Sie hostname/IP-mismatch Fehler, entweder lösen Sie Ihr Zertifikat, oder negieren alle diese harte Arbeit durch die Deaktivierung sslValidate:
Quelle:
http://www.bainweb.com/2015/11/connecting-to-mongodb-over-tlsssl-with.html
Als Vorschlag in den Kommentaren, die
node-mongodb-native
hat alles, was benötigt wird.Ich habe es bis und läuft mit den folgenden:
Bearbeiten
Können Sie auch ssl von Mungo:
Soll die Authentifizierung mit Hilfe eines Zertifikats, mit
node-mongodb-native
: