Verwendung von X509-Zertifikaten in fibjs
Hintergrundeinführung
Was ist ein x509-Zertifikat?
Das x509-Zertifikat ist das am häufigsten verwendete digitale Zertifikatformat im Public Key Authentication Service (PKI)-System, das auf internationalen Standards basiert. Es kann zur Authentifizierung und Verschlüsselung verwendet werden und wird häufig in SSL/TLS-Protokollen und anderen Arten von Netzwerkanwendungen im Internet verwendet. Das x509-Zertifikat verwendet einen Authentifizierungsmechanismus mit öffentlichem/privatem Schlüssel und kann die Vertraulichkeit, Integrität und Authentizität der Datenübertragung gewährleisten.
In welchen Szenarien wird das x509-Zertifikat verwendet?
Im Internet ist das am häufigsten verwendete Szenario für x509-Zertifikate die Zertifikatauthentifizierung im TLS/SSL-Protokoll, um sicherzustellen, dass die zwischen dem Client und dem Server übertragenen Daten über einen sicheren Kanal verschlüsselt und überprüft werden. x509-Zertifikate können auch zur Identitätsauthentifizierung in Anwendungsprotokollen verwendet werden, die auf Verschlüsselung mit öffentlichen und privaten Schlüsseln wie VPN/SSH basieren.
fibjs unterstützt die Verarbeitung von x509-Zertifikaten
fibjs unterstützt die Verarbeitung von x509-Zertifikaten und stellt im Kryptomodul Klassen wie X509Cert und X509Req bereit, um Vorgänge wie das Lesen, Erstellen und Signieren von Zertifikaten auszuführen. Sie können diese Klassen verwenden, um die Gültigkeitsdauer, den öffentlichen Schlüssel, den Aussteller, den Namen des Antragstellers und andere Informationen des Zertifikats abzurufen sowie Vorgänge wie das Signieren und Überprüfen des Zertifikats durchzuführen. Gleichzeitig stellt fibjs auch die HttpsServer-Klasse zur Unterstützung der HTTPS-Zertifikatauthentifizierung und verschlüsselter Verbindungen bereit, wodurch die Verwendung von x509-Zertifikaten in fibjs einfacher wird.
Einführung in das X509-Modul
Was ist das X509-Modul?
Im Kryptomodul von fibjs werden Klassen wie X509Cert und X509Req bereitgestellt, um Vorgänge wie das Lesen, Erstellen und Signieren von x509-Zertifikaten durchzuführen. Das X509-Modul ist ein Modul zur Verarbeitung von x509-Zertifikaten und bietet Vorgänge wie das Parsen, Erstellen und Überprüfen von Zertifikaten.
Die Funktion des X509-Moduls
Die Funktion des X509-Moduls besteht darin, das x509-Zertifikat zu betreiben. Mit diesem Modul können Sie das vorhandene x509-Zertifikat lesen und die Gültigkeitsdauer, den öffentlichen Schlüssel, den Aussteller, den Betreffnamen und andere Informationen des Zertifikats abrufen. Gleichzeitig kann das X509-Modul auch x509-Zertifikatanfragen und Signaturzertifikate erstellen, beispielsweise zur Zertifikatsauthentifizierung in TLS/SSL-Protokollen.
X509-Modul-API
Im Folgenden finden Sie eine Liste der wichtigeren APIs im X509-Modul:
- X509Cert: Klasse zum Lesen und Bearbeiten von x509-Zertifikaten.
- X509Req: Klasse, die zum Erstellen von x509-Zertifikatanforderungen verwendet wird.
- verify: Überprüfen Sie das x509-Zertifikat über das CA-Zertifikatpaar.
- SslServer: Eine Klasse, die Authentifizierungsdienste basierend auf x509-Zertifikaten bereitstellt.
- SslSocket: Eine Klasse, die Socket-Sende- und Empfangsdatenvorgänge für Authentifizierungsdienste basierend auf x509-Zertifikaten bereitstellt.
Beispielcode
Im Folgenden finden Sie Beispielcode zum Lesen eines x509-Zertifikats und zum Erstellen einer x509-Zertifikatsanforderung:
1
2
3
4
5
6
7
8
9
10
11
12const crypto = require('crypto');
// load the cert
const cert = crypto.loadCert('server.crt');
console.log(cert.subject);
// create x509 certificate request
let pky = crypto.PKey.from(private_pem);
let req = new crypto.X509Req("CN=localhost,O=fibjs", pky);
let derReq = req.der();
let pemReq = req.pem();
console.log(pemReq);
Der obige Beispielcode liest ein vorhandenes x509-Zertifikat über die Klasse X509Cert und gibt den Betreffnamen des Zertifikats aus. Gleichzeitig zeigt der Beispielcode auch, wie über X509Req eine x509-Zertifikatsanforderung erstellt und die Anforderungsinformationen im PEM-Format ausgegeben werden.
Verwendung des X509-Moduls
Generieren Sie ein selbstsigniertes Zertifikat
Der Prozess zum Erstellen eines selbstsignierten Zertifikats ist relativ einfach. Im Allgemeinen müssen Sie die folgenden Schritte ausführen:
- PKey (privater Schlüssel) generieren
- Generieren Sie X509Req (Zertifikatsanforderung)
- Verwenden Sie X509Req, um X509Cert (formelles Zertifikat) zu generieren.
- Zertifikat speichern
Mit diesen Schritten können Sie Ihr eigenes x509-Zertifikat für die Verwendung in Test- und Entwicklungsumgebungen generieren. Das Folgende ist die spezifische Implementierung:
Verwenden Sie den folgenden Code, um ein PKey-Objekt zu erstellen. Unter anderem kann die from()-Methode ein PKey-Objekt über eine PEM-Formatzeichenfolge oder einen Puffer erstellen.
1
2const crypto = require('crypto');
const pky = crypto.PKey.from(private_pem);
Verwenden Sie den folgenden Code, um ein X509Req-Objekt zu erstellen. Unter diesen ist der erste Parameter von Der zweite Parameter ist das zuvor erstellte PKey-Objekt, das für die Zertifikatssignierung verwendet wird. Zum Beispiel:
1let xrq = new crypto.X509Req("CN=localhost,O=fibjs", pky);
Verwenden Sie den folgenden Code, um ein X509Cert (offizielles Zertifikat) zu erstellen. Der spezifische Vorgang besteht darin, die sign()-Methode von X509Req aufzurufen, die drei Parameter akzeptiert: den Namen der Zertifizierungsstelle, das zum Signieren verwendete PKey-Objekt und andere verwandte Informationen. Im folgenden Beispiel wird beispielsweise das X509Req-Objekt mit einem selbstsignierten Zertifikat signiert, die Signaturautorität ist es selbst und das Zertifikat ist 10 Jahre gültig:
1
2
3
4
5const opt = {
notBefore: new Date(),
notAfter: new Date(new Date().getTime() + 10 * 365 * 24 * 60 * 60 * 1000)
};
const cert = xrq.sign("CN=localhost,O=fibjs", pky, opt);
Verwenden Sie den folgenden Code, um den PKey und das X509Cert in einer lokalen Datei zu speichern. Da das Zertifikat im PEM-Format gespeichert wird, können Sie das Zertifikatobjekt mit der Methode pem() in einen String konvertieren und dann direkt in der Datei speichern:
1
2
3
4
5const fs = require('fs');
const ks = pky.pem(); // export pem format data of the private key
const cs = cert.pem(); // export pem format data of the cert
fs.writeFile('mycert.key', ks); // save the key
fs.writeFile('mycert.pem', cs); // save the cert
Der obige Code schließt den gesamten Prozess von der Generierung eines privaten Schlüssels bis zur Speicherung eines selbstsignierten Zertifikats ab. Mit diesem Zertifikat können sicherheitsrelevante Anwendungen getestet und entwickelt werden.
Zertifikat laden
Das Laden des Zertifikats ist ein wichtiger Vorgang bei der Verwendung von x509-Zertifikaten. Im Folgenden wird beschrieben, wie Sie die Zertifikatsdatei laden und die öffentlichen und privaten Schlüssel laden.
Um ein x509-Zertifikat verwenden zu können, muss die Zertifikatsdatei zunächst in den Speicher eingelesen und in ein x509-Zertifikatobjekt umgewandelt werden. Hier sind die Schritte zum Laden der Zertifikatsdatei:
Im JavaScript-Programm fibjs können Sie die entsprechende API des fs-Moduls zum Lesen von Dateien verwenden. Verwenden Sie beispielsweise den folgenden Code, um eine Zertifikatsdatei im PEM-Format zu lesen:
1
2const fs = require('fs');
const certData = fs.readFile('server.crt');
Nach dem Lesen der Datei muss der Inhalt der Zertifikatsdatei mithilfe des X509Cert-Objekts in ein x509-Zertifikat umgewandelt werden:
1
2const crypto = require('crypto');
const cert = new crypto.X509Cert(certData);
Nach den oben genannten Schritten können Sie die lokale x509-Zertifikatdatei laden. Sie können crypto.loadCert auch verwenden, um das Zertifikat direkt zu lesen:
1
2const crypto = require('crypto');
const cert = crypto.loadCert('server.crt');
Das x509-Zertifikat speichert den öffentlichen Schlüssel und die verschlüsselten Signaturinformationen. Daher müssen Sie bei Verwendung des Zertifikats den öffentlichen Schlüssel im Zertifikat analysieren, um die Datenverschlüsselung und -entschlüsselung zu erleichtern. Die PKey-Klasse kann öffentliche/private Schlüsselzeichenfolgen im PEM-Format in öffentliche/private Schlüsselobjekte konvertieren. Mit dem folgenden Code können Sie die Zeichenfolge des öffentlichen/privaten Schlüssels im PEM-Format lesen und ein PKey-Objekt erstellen:
1
2const privateKey = fs.readFile('private.pem'); // load the data from file
const pKey = crypto.PKey.from(privateKey); // load from pem format data
Oder verwenden Sie crypto.loadPKey, um direkt zu lesen:
1
2const crypto = require('crypto');
const pKey = crypto.loadPKey('private.pem');
Nach den oben genannten Schritten kann die öffentliche/private Schlüsseldatei in ein PKey-Objekt umgewandelt werden.
Parse-Zertifikat
Zertifikate sind ein wichtiger Bestandteil von SSL/TLS-Interaktionen und werden zur Authentifizierung und Verschlüsselung der Datenübertragung verwendet. Lassen Sie uns nun lernen, wie man ein Zertifikat in fibjs analysiert.
Wir können die Klasse usw. .
Der Beispielcode lautet wie folgt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14const crypto = require('crypto');
const cert = crypto.loadCert('path/to/cert.pem');
const subjectName = cert.subject;
const issuerName = cert.issuer;
const validFromDate = cert.notBefore;
const expirationDate = cert.notAfter;
const serialNumber = cert.serial;
console.log(`证书主题名称: ${subjectName}`);
console.log(`证书颁发者名称: ${issuerName}`);
console.log(`证书有效期: ${validFromDate.toLocaleString()} ~ ${expirationDate.toLocaleString()}`);
console.log(`证书序列号: ${serialNumber}`);
Wenn wir ein Zertifikat verwenden müssen, müssen wir die Legitimität des Zertifikats überprüfen. Der Schlüssel besteht darin, sicherzustellen, dass das Zertifikat von einer vertrauenswürdigen Organisation ausgestellt wurde. Sie können die Überprüfungsmethode in X509Cert verwenden, um die Gültigkeit des Zertifikats zu überprüfen. Eine gängige Überprüfungsmethode besteht darin, die Zertifikatskette zu überprüfen, um sicherzustellen, dass das Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle ausgestellt wurde.
Der Beispielcode lautet wie folgt:
1
2
3
4
5
6
7
8
9const caCert = crypto.loadCert('path/to/ca.crt');
const verifyResult = cert.verify(caCert);
if (verifyResult !== 0) {
console.error('证书验证失败', verifyResult);
} else {
console.log('证书验证通过');
}
In diesem Beispielcode lesen wir zuerst das angegebene CA-Zertifikat, generieren ein X509Cert-Objekt und verwenden dann die Überprüfungsmethode für das Zertifikatobjekt, um das zu überprüfende Zertifikat zu überprüfen und das Überprüfungsergebnis zu erhalten. Sie können feststellen, ob das Zertifikat legitim ist, indem Sie vergleichen, ob das Überprüfungsergebnis gleich 0 ist. Wenn das Verifizierungsergebnis nicht 0 ist, bedeutet dies, dass die Verifizierung fehlgeschlagen ist und die Verwendung des Zertifikats eingestellt werden sollte.
Zertifikat verwenden
Bei Verwendung eines https-Servers müssen Sie sicherstellen, dass das verwendete Zertifikat dem Server hinzugefügt wurde. Hier ist ein einfaches Beispiel für das Laden von Zertifikats- und privaten Schlüsseldateien über das Kryptomodul:
1
2
3
4
5
6
7
8
9
10const http = require("http");
const crypto = require("crypto");
const cert = crypto.loadCert("server.crt");
const key = crypto.loadPKey("server.key");
const server = new http.HttpsServer(cert, key, 8443, function(req) {
req.response.write(`Hello, fibjs!`);
});
server.start();
Im obigen Beispiel haben wir die Dateien server.crt und server.key über die Funktionen „loadCert“ und „loadPKey“ geladen, dann einen Dienst mithilfe des HttpsServer-Objekts erstellt und den Dienst mit den geladenen Zertifikats- und Schlüsseldateien gestartet.
Hinweise zum X509-Modul
Zertifikatssicherheit
Das Modul
- Sicherheit privater Schlüssel. Der private Schlüssel ist ein wichtiger Bestandteil des Zertifikats und muss streng geschützt werden. Bei der Verwendung von Zertifikaten sollte der private Schlüssel möglichst an einem sicheren Ort aufbewahrt und die Zugriffsberechtigungen entsprechend eingestellt werden.
- Die Übertragung von Zertifikaten erfolgt sicher. Beim Austausch und der Nutzung von Zertifikaten müssen sichere Übertragungsmethoden eingesetzt werden, um einen Diebstahl oder eine Manipulation von Zertifikaten zu verhindern.
- Die Zertifikatsüberprüfung ist sicher. Die Zertifikatsüberprüfung ist ein wichtiger Schritt zur Gewährleistung der Gültigkeit und Sicherheit des Zertifikats. Die Überprüfung muss in strikter Übereinstimmung mit den Zertifikatsüberprüfungsregeln durchgeführt werden, um zu verhindern, dass gefälschte Zertifikate Benutzer irreführen.
Gültigkeitsdauer des Zertifikats
Die Gültigkeitsdauer eines Zertifikats bezieht sich auf den Zeitraum vom Ausstellungsdatum des Zertifikats bis zum Ablaufdatum des Zertifikats. Die Gültigkeitsdauer des Zertifikats begrenzt die Nutzungsdauer des Zertifikats. Vor Ablauf des Zertifikats kann der Zertifikatsinhaber das Zertifikat verwenden, nach Ablauf des Zertifikats verliert das Zertifikat jedoch seine Gültigkeit.
Daher müssen Sie vor der Verwendung eines Zertifikats die Gültigkeitsdauer des Zertifikats überprüfen, um die Verwendung eines abgelaufenen Zertifikats zu vermeiden. Gleichzeitig sollte das Zertifikat möglichst zeitnah vor Ablauf aktualisiert werden, um die Verfügbarkeit des Zertifikats sicherzustellen.
Zertifikatsvertrauensmechanismus
Der Vertrauensmechanismus des Zertifikats ist ein entscheidender Faktor dafür, ob der Client oder der Server dem Zertifikat vertrauen kann. Normalerweise vertraut der Client oder Server nur Zertifikaten, die von einer vertrauenswürdigen Behörde (CA) signiert und anerkannt wurden.
Bevor Sie ein Zertifikat verwenden, müssen Sie die Vertrauensprobleme des Zertifikats ermitteln. Sie können feststellen, ob ein Zertifikat vertrauenswürdig ist, indem Sie die ausstellende Stelle des Zertifikats, den Distinguished Name des Zertifikats usw. überprüfen.
Mechanismus zur Zertifikatserneuerung
Der Mechanismus zur Zertifikatserneuerung ist ein wichtiger Bestandteil, um sicherzustellen, dass das Zertifikat gültig und sicher bleibt. Normalerweise umfasst die Zertifikatsverlängerung hauptsächlich zwei Aspekte:
- Erneuerung nach Ablauf des Zertifikats. Nach Ablauf des Zertifikats müssen Sie das Zertifikat erneut beantragen und es gemäß den entsprechenden Regeln unterzeichnen und verifizieren, um die Gültigkeit des Zertifikats sicherzustellen.
- Zertifikatsverlängerungen und -erneuerungen. Wenn Sie während der Nutzung des Zertifikats die Zertifikatsinformationen erweitern oder aktualisieren müssen, können Sie dies tun, indem Sie das Zertifikat erneut beantragen und es signieren und überprüfen.
Zusammenfassend lässt sich sagen, dass das X509-Modul die Erstellung, Verarbeitung und andere Funktionen von Zertifikaten bereitstellt und ein wichtiges Bindeglied zur Gewährleistung der Sicherheit, Vertrauenswürdigkeit und Gültigkeit von Zertifikaten darstellt. Bei der Nutzung und Verwaltung von Zertifikaten sind entsprechende Regeln und Anforderungen zu beachten, um die Gültigkeit und Sicherheit des Zertifikats zu gewährleisten.