Utilisation des certificats X509 dans fibjs
Introduction au contexte
Qu'est-ce qu'un certificat x509
Le certificat x509 est le format de certificat numérique le plus couramment utilisé dans le système de service d'authentification par clé publique (PKI) basé sur les normes internationales. Il peut être utilisé pour l'authentification et le cryptage et est largement utilisé dans les protocoles SSL/TLS et d'autres types d'applications réseau sur Internet. Le certificat x509 utilise un mécanisme d'authentification par clé publique/clé privée et peut garantir la confidentialité, l'intégrité et l'authenticité de la transmission des données.
Dans quels scénarios le certificat x509 est-il utilisé ?
Sur Internet, le scénario le plus couramment utilisé pour les certificats x509 est l'authentification de certificat dans le protocole TLS/SSL afin de garantir que les données transmises entre le client et le serveur sont cryptées à l'aide d'un canal sécurisé et vérifiées. Les certificats x509 peuvent également être utilisés pour l'authentification d'identité dans les protocoles d'application basés sur le cryptage par clé publique et privée tels que VPN/SSH.
fibjs prend en charge le traitement des certificats x509
fibjs prend en charge le traitement des certificats x509 et fournit des classes telles que X509Cert et X509Req dans le module crypto pour effectuer des opérations telles que la lecture, la création et la signature de certificats. Vous pouvez utiliser ces classes pour obtenir la période de validité du certificat, la clé publique, l'émetteur, le nom du sujet et d'autres informations, ainsi qu'effectuer des opérations telles que la signature et la vérification du certificat. Dans le même temps, fibjs fournit également la classe HttpsServer pour prendre en charge l'authentification par certificat HTTPS et les connexions cryptées, facilitant ainsi l'utilisation des certificats x509 dans fibjs.
Présentation du module X509
Qu'est-ce que le module X509 ?
Dans le module crypto de fibjs, des classes telles que X509Cert et X509Req sont fournies pour effectuer des opérations telles que la lecture, la création et la signature de certificats x509. Le module X509 est un module de traitement des certificats x509, fournissant des opérations telles que l'analyse, la création et la vérification des certificats.
La fonction du module X509
La fonction du module X509 est d'exploiter le certificat x509. Vous pouvez utiliser ce module pour lire le certificat x509 existant et obtenir la période de validité, la clé publique, l'émetteur, le nom du sujet et d'autres informations du certificat. Dans le même temps, le module X509 peut également créer des demandes de certificat x509 et signer des certificats, par exemple pour l'authentification de certificat dans les protocoles TLS/SSL.
API des modules X509
Voici une liste des API les plus importantes du module X509 :
- X509Cert: Classe de lecture et de manipulation des certificats x509.
- X509Req: Classe utilisée pour créer des demandes de certificat x509.
- verify : Vérifiez le certificat x509 via la paire de certificats CA.
- SslServer: Une classe qui fournit des services d'authentification basés sur des certificats x509.
- SslSocket: classe qui fournit des opérations d'envoi et de réception de données par socket pour les services d'authentification basés sur des certificats x509.
Exemple de code
Voici un exemple de code pour lire un certificat x509 et créer une demande de certificat x509 :
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);
L'exemple de code ci-dessus lit un certificat x509 existant via la classe X509Cert et génère le nom du sujet du certificat. Dans le même temps, l'exemple de code montre également comment créer une demande de certificat x509 via X509Req et génère les informations de demande au format PEM.
Utilisation du module X509
Générer un certificat auto-signé
Le processus de génération d'un certificat auto-signé est relativement simple. Généralement, vous devez suivre les étapes suivantes :
- Générer une PKey (clé privée)
- Générer X509Req (demande de certificat)
- Utilisez X509Req pour générer X509Cert (certificat formel)
- enregistrer le certificat
En suivant ces étapes, vous pouvez générer votre propre certificat x509 à utiliser dans des environnements de test et de développement. Voici la mise en œuvre spécifique :
Utilisez le code suivant pour créer un objet PKey. Parmi eux, la méthode from() peut créer un objet PKey via une chaîne au format PEM ou un Buffer.
1
2const crypto = require('crypto');
const pky = crypto.PKey.from(private_pem);
Utilisez le code suivant pour créer un objet X509Req. Parmi eux, le premier paramètre de X509Req est le nom unique du sujet (Subject Name) et le format de chaîne est key1=value1,key2=value2. Le deuxième paramètre est l'objet PKey créé précédemment, utilisé pour la signature du certificat. Par exemple:
1let xrq = new crypto.X509Req("CN=localhost,O=fibjs", pky);
Utilisez le code suivant pour créer un X509Cert (certificat officiel). L'opération spécifique consiste à appeler la méthode sign() de X509Req, qui accepte trois paramètres : le nom de l'autorité de certification, l'objet PKey utilisé pour la signature et d'autres informations associées. Par exemple, dans l'exemple suivant, l'objet X509Req est signé avec un certificat auto-signé, l'autorité de signature est elle-même et le certificat est valide 10 ans :
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);
Utilisez le code suivant pour enregistrer le PKey et le X509Cert dans un fichier local. Puisque le certificat est enregistré au format PEM, vous pouvez utiliser la méthode pem() pour convertir l'objet certificat en chaîne, puis l'enregistrer directement dans le fichier :
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
Le code ci-dessus complète l'ensemble du processus, depuis la génération d'une clé privée jusqu'au stockage d'un certificat auto-signé. Les applications liées à la sécurité peuvent être testées et développées avec ce certificat.
Certificat de chargement
Le chargement du certificat est une opération importante lors de l'utilisation de certificats x509. Ce qui suit décrit comment charger le fichier de certificat et charger les clés publiques et privées.
Afin d'utiliser un certificat x509, le fichier de certificat doit d'abord être lu en mémoire et converti en objet de certificat x509. Voici les étapes à suivre pour charger le fichier de certificat :
Dans le programme JavaScript fibjs, vous pouvez utiliser l'API appropriée du module fs pour lire des fichiers. Par exemple, utilisez le code suivant pour lire un fichier de certificat au format PEM :
1
2const fs = require('fs');
const certData = fs.readFile('server.crt');
Après avoir lu le fichier, le contenu du fichier de certificat doit être converti en certificat x509 à l'aide de l'objet X509Cert :
1
2const crypto = require('crypto');
const cert = new crypto.X509Cert(certData);
Après les étapes ci-dessus, vous pouvez charger le fichier de certificat x509 local. Vous pouvez également utiliser crypto.loadCert pour lire directement le certificat :
1
2const crypto = require('crypto');
const cert = crypto.loadCert('server.crt');
Le certificat x509 stocke la clé publique et les informations de signature chiffrées. Par conséquent, lorsque vous utilisez le certificat, vous devez analyser la clé publique dans le certificat pour faciliter le chiffrement et le déchiffrement des données. La classe PKey peut convertir des chaînes de clés publiques/privées au format PEM en objets clés publiques/privées. Vous pouvez utiliser le code suivant pour lire la chaîne de clé publique/privée au format PEM et créer un objet PKey :
1
2const privateKey = fs.readFile('private.pem'); // load the data from file
const pKey = crypto.PKey.from(privateKey); // load from pem format data
Ou utilisez crypto.loadPKey pour lire directement :
1
2const crypto = require('crypto');
const pKey = crypto.loadPKey('private.pem');
Après les étapes ci-dessus, le fichier de clé publique/privée peut être converti en un objet PKey.
Analyser le certificat
Les certificats sont un élément important des interactions SSL/TLS, utilisés pour l'authentification et le cryptage de la transmission de données. Voyons maintenant comment analyser un certificat dans fibjs.
Nous pouvons utiliser la classe X509Cert du module crypto pour construire un objet certificat en lisant un fichier de certificat au format DER/PEM, puis obtenir des informations de base sur le certificat, telles que l'obtention du nom du sujet du certificat, du nom de l'émetteur, de la période de validité, etc. .
L'exemple de code est le suivant :
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}`);
Lorsque nous devons utiliser un certificat, nous devons vérifier la légitimité du certificat. L'essentiel est de nous assurer que le certificat est émis par une organisation de confiance. Vous pouvez utiliser la méthode de vérification dans X509Cert pour vérifier la validité du certificat. Une méthode de vérification courante consiste à vérifier la chaîne de certificat pour garantir que le certificat est émis par une autorité de certification de confiance.
L'exemple de code est le suivant :
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('证书验证通过');
}
Dans cet exemple de code, nous lisons d'abord le certificat CA spécifié, générons un objet X509Cert, puis utilisons la méthode de vérification sur l'objet certificat pour vérifier le certificat qui doit être vérifié et obtenir le résultat de la vérification. Vous pouvez déterminer si le certificat est légitime en comparant si le résultat de la vérification est égal à 0. Si le résultat de la vérification n'est pas 0, cela signifie que la vérification a échoué et que l'utilisation du certificat doit être arrêtée.
Utiliser le certificat
Lorsque vous utilisez un serveur https, vous devez vous assurer que le certificat utilisé a été ajouté au serveur. Voici un exemple simple de chargement de fichiers de certificat et de clé privée via le module crypto :
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();
Dans l'exemple ci-dessus, nous avons chargé les fichiers server.crt et server.key via les fonctions LoadCert et LoadPKey, puis créé un service à l'aide de l'objet HttpsServer et démarré le service avec le certificat et les fichiers de clé chargés.
Remarques sur le module X509
Sécurité du certificat
Le module X509 assure des fonctions telles que la création et le traitement de certificats. La sécurité du certificat doit être garantie. Cela nécessite une attention particulière sur les points suivants :
- Sécurité des clés privées. La clé privée est une partie importante du certificat et doit être strictement protégée. Lors de l'utilisation des certificats, la clé privée doit être stockée dans un endroit sûr autant que possible et les autorisations d'accès doivent être définies de manière appropriée.
- La transmission des certificats est sécurisée. Lors de l'échange et de l'utilisation des certificats, des méthodes de transmission sécurisées doivent être utilisées pour empêcher le vol ou la falsification des certificats.
- La vérification du certificat est sécurisée. La vérification du certificat est une étape importante pour garantir la validité et la sécurité du certificat. La vérification doit être effectuée en stricte conformité avec les règles de vérification des certificats pour éviter que de faux certificats n'induisent les utilisateurs en erreur.
Durée de validité du certificat
La période de validité d'un certificat fait référence à la période allant de la date de délivrance du certificat à la date d'expiration du certificat. La période de validité du certificat limite la durée d'utilisation du certificat. Avant l'expiration du certificat, le titulaire du certificat peut utiliser le certificat, mais après l'expiration du certificat, le certificat perdra sa validité.
Par conséquent, avant d’utiliser un certificat, vous devez vérifier la période de validité du certificat pour éviter d’utiliser un certificat expiré. Dans le même temps, le certificat doit être mis à jour dès que possible avant son expiration afin de garantir sa disponibilité.
Mécanisme de confiance des certificats
Le mécanisme de confiance du certificat est un facteur clé pour déterminer si le certificat peut être approuvé par le client ou le serveur. En règle générale, le client ou le serveur ne fait confiance qu'aux certificats signés et reconnus par une autorité de confiance (CA).
Avant d'utiliser un certificat, vous devez déterminer les problèmes de confiance du certificat. Vous pouvez déterminer si un certificat est digne de confiance en vérifiant l'autorité émettrice du certificat, le nom distinctif du sujet du certificat, etc.
Mécanisme de renouvellement du certificat
Le mécanisme de renouvellement du certificat est un élément important pour garantir que le certificat reste valide et sécurisé. Normalement, le renouvellement du certificat comprend principalement deux aspects :
- Renouvellement après expiration du certificat. Après l'expiration du certificat, vous devez présenter une nouvelle demande de certificat, le signer et le vérifier selon les règles correspondantes pour garantir la validité du certificat.
- Extensions et renouvellements de certificats. Pendant l'utilisation du certificat, si vous devez étendre ou mettre à jour les informations du certificat, vous pouvez le faire en redemandant le certificat, en le signant et en le vérifiant.
En résumé, le module X509 assure la création, le traitement et d'autres fonctions de certificats, et constitue un lien important pour garantir la sécurité, la fiabilité et la validité des certificats. Lors du processus d'utilisation et de gestion des certificats, les règles et exigences correspondantes doivent être respectées pour garantir la validité et la sécurité du certificat.