Modul Grundmodul

Modul SSL

Das SSL-Modul ist ein in fibjs integriertes Verschlüsselungsmodul, mit dem das SSL-Hypertext-Übertragungsprotokoll einer Netzwerkverbindung eingerichtet werden kann. Dieses Modul bietet eine kryptografische Überprüfung, damit Clients und Server sicherstellen können, dass die Verbindung sicher ist

Das SSL-Modul enthält mehrere Objekte und Konstanten, die für einen vollständigen SSL-Client/Server-Kommunikationsprozess verwendet werden können. Häufig verwendete Kategorien sind:

  1. SslSocket: Basierend auf dem BasiswertSocketDas gekapselte SSL-Socket-Objekt kann zur Durchführung einer bidirektionalen Authentifizierung und anderer Kommunikationsvorgänge mit dem Remote-Server verwendet werden.
  2. SslHandler: SSL-Protokollkonvertierungsprozessor, der zum Konvertieren von Datenströmen in SSL-Stream-Protokolle verwendet wird und zum Aufbau serverseitiger Dienste geeignet ist.
  3. SslServer: SSL-Serverobjekt, praktisch für den Aufbau eines Standard-Mehrfaser-SSL-Servers.

Das Folgende istssl.ServerAls Beispiel stellen wir die Verwendung des SSL-Moduls vor.

ssl.ServerEs handelt sich um einen einfachen SSL-Server, der einen SSL-basierten Netzwerkdienst bereitstellt. verwendenssl.ServerDie Klasse kann schnell einen Server basierend auf SSL/TLS erstellen und ist grundsätzlich mit allen Funktionen von TCP/HTTP-Diensten kompatibel. Es weist folgende Eigenschaften auf:

  • Es wird mit einem X.509-Zertifikatmanager geliefert, der mehrere Domänennamenzertifikate, Platzhalter, SAN-Zertifikate und andere Funktionen unterstützt.
  • Es verfügt über dieselbe Schnittstelle und Verwendung wie der TCP-Server, und der Code der oberen Ebene muss sich nicht um den Unterschied zwischen SSL-Verbindung und TCP-Verbindung kümmern.
  • Alle SSL/TLS-Sicherheitsprotokolle werden mithilfe der integrierten OpenSSL-Bibliothek implementiert.
  • Unterstützt Protokollerweiterungsfunktionen wie SNI und ALPN.

Hier ist ein einfaches Beispiel:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
const ssl = require('ssl'); const http = require('http'); const crypto = require('crypto'); // read cert and key let key = crypto.loadPKey('mycert.key'); let cert = crypto.loadCert('mycert.pem'); // create ssl server const svr = new ssl.Server(cert, key, 8080, s => { var data; while (data = s.read()) { console.log(`received data: ${data.toString()}`); s.write(data.toString().toUpperCase()); } }); // start server svr.start();

Im obigen Code lesen wir zunächst das SSL-Zertifikat und die privaten Schlüsseldateien und erstellen dann eine SSL-Serverinstanz. Konvertieren Sie in der Rückruffunktion des Servers nach dem Empfang der Clientdaten die Daten in Großbuchstaben und geben Sie die Daten über die Schreibfunktion an den Client zurück.

Objekt

Socket

ErstellenSslSocketObjekt, sieheSslSocket

1
SslSocket ssl.Socket;

Handler

ErstellenSslHandlerObjekt, sieheSslHandler

1
SslHandler ssl.Handler;

Server

ErstellenSslServerObjekt, sieheSslServer

1
SslServer ssl.Server;

statische Funktion

connect

ErstellenSslSocketwidersprechen und Verbindung herstellen

1 2
static Stream ssl.connect(String url, Integer timeout = 0) async;

Aufrufparameter:

  • url: String, gibt das Verbindungsprotokoll an, das sein kann: ssl://host:port
  • timeout: Ganzzahl, gibt den Timeout an, die Einheit ist Millisekunden, der Standardwert ist 0

Rückgabeergebnisse:


ErstellenSslSocketwidersprechen und Verbindung herstellen

1 2 3 4
static Stream ssl.connect(String url, X509Cert crt, PKey key, Integer timeout = 0) async;

Aufrufparameter:

  • url: String, gibt das Verbindungsprotokoll an, das sein kann: ssl://host:port
  • crt:X509Cert, Zertifikat, das zum Senden an den Server zur Überprüfung des Clients verwendet wird
  • key:PKey, privater Schlüssel, der zur Kommunikation mit dem Client verwendet wird
  • timeout: Ganzzahl, gibt den Timeout an, die Einheit ist Millisekunden, der Standardwert ist 0

Rückgabeergebnisse:


ErstellenSslSocketwidersprechen und Verbindung herstellen

1 2 3 4 5
static Stream ssl.connect(String url, Integer verification, X509Cert crt, PKey key, Integer timeout = 0) async;

Aufrufparameter:

  • url: String, gibt das Verbindungsprotokoll an, das sein kann: ssl://host:port
  • verification: Ganzzahl, Zertifikatsüberprüfungsmodus
  • crt:X509Cert, Zertifikat, das zum Senden an den Server zur Überprüfung des Clients verwendet wird
  • key:PKey, privater Schlüssel, der zur Kommunikation mit dem Client verwendet wird
  • timeout: Ganzzahl, gibt den Timeout an, die Einheit ist Millisekunden, der Standardwert ist 0

Rückgabeergebnisse:


setClientCert

Legen Sie das Standard-Client-Zertifikat fest

1 2
static ssl.setClientCert(X509Cert crt, PKey key);

Aufrufparameter:

  • crt:X509Cert, Zertifikat, das zum Senden an den Server zur Überprüfung des Clients verwendet wird
  • key:PKey, privater Schlüssel, der zur Kommunikation mit dem Client verwendet wird

loadRootCerts

Laden Sie das mitgelieferte Standard-Stammzertifikat, das äquivalent istssl.ca.loadRootCerts

1
static ssl.loadRootCerts();

Der Inhalt dieses Zertifikats stammt von: http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt

statische Eigenschaften

ca

X509Cert, globales Zertifikat, wird für die Überprüfung des Serverzertifikats im SSL-Clientmodus verwendet

1
static readonly X509Cert ssl.ca;

verification

Ganzzahl, legt den Zertifikatsüberprüfungsmodus fest, der Standardwert ist VERIFY_REQUIRED

1
static Integer ssl.verification;

Konstante

VERIFY_NONE

Zertifikatsüberprüfungsmodus, keine Überprüfung

1
const ssl.VERIFY_NONE = 0;

VERIFY_OPTIONAL

Zertifikatsüberprüfungsmodus, optionale Überprüfung, sodass die Überprüfung fehlschlagen kann

1
const ssl.VERIFY_OPTIONAL = 1;

VERIFY_REQUIRED

Zertifikatsüberprüfungsmodus, der eine Überprüfung erfordert und unterbrochen wird, wenn die Überprüfung fehlschlägt.

1
const ssl.VERIFY_REQUIRED = 2;

BADCERT_EXPIRED

Ergebnisse der Zertifikatsüberprüfung, Zertifikat-Timeout

1
const ssl.BADCERT_EXPIRED = 1;

BADCERT_REVOKED

Ergebnis der Zertifikatsüberprüfung, Zertifikat wurde widerrufen

1
const ssl.BADCERT_REVOKED = 2;

BADCERT_CN_MISMATCH

Ergebnis der Zertifikatsüberprüfung, falscher Zertifikatsname

1
const ssl.BADCERT_CN_MISMATCH = 4;

BADCERT_NOT_TRUSTED

Ergebnis der Zertifikatsüberprüfung: Das Zertifikat ist nicht vertrauenswürdig

1
const ssl.BADCERT_NOT_TRUSTED = 8;