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:
- 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.
- SslHandler: SSL-Protokollkonvertierungsprozessor, der zum Konvertieren von Datenströmen in SSL-Stream-Protokolle verwendet wird und zum Aufbau serverseitiger Dienste geeignet ist.
- 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
19const 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
1SslSocket ssl.Socket;
Handler
ErstellenSslHandlerObjekt, sieheSslHandler
1SslHandler ssl.Handler;
Server
ErstellenSslServerObjekt, sieheSslServer
1SslServer ssl.Server;
statische Funktion
connect
ErstellenSslSocketwidersprechen und Verbindung herstellen
1
2static 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
4static 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
5static 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
2static 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
1static 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
1static readonly X509Cert ssl.ca;
verification
Ganzzahl, legt den Zertifikatsüberprüfungsmodus fest, der Standardwert ist VERIFY_REQUIRED
1static Integer ssl.verification;
Konstante
VERIFY_NONE
Zertifikatsüberprüfungsmodus, keine Überprüfung
1const ssl.VERIFY_NONE = 0;
VERIFY_OPTIONAL
Zertifikatsüberprüfungsmodus, optionale Überprüfung, sodass die Überprüfung fehlschlagen kann
1const ssl.VERIFY_OPTIONAL = 1;
VERIFY_REQUIRED
Zertifikatsüberprüfungsmodus, der eine Überprüfung erfordert und unterbrochen wird, wenn die Überprüfung fehlschlägt.
1const ssl.VERIFY_REQUIRED = 2;
BADCERT_EXPIRED
Ergebnisse der Zertifikatsüberprüfung, Zertifikat-Timeout
1const ssl.BADCERT_EXPIRED = 1;
BADCERT_REVOKED
Ergebnis der Zertifikatsüberprüfung, Zertifikat wurde widerrufen
1const ssl.BADCERT_REVOKED = 2;
BADCERT_CN_MISMATCH
Ergebnis der Zertifikatsüberprüfung, falscher Zertifikatsname
1const ssl.BADCERT_CN_MISMATCH = 4;
BADCERT_NOT_TRUSTED
Ergebnis der Zertifikatsüberprüfung: Das Zertifikat ist nicht vertrauenswürdig
1const ssl.BADCERT_NOT_TRUSTED = 8;