Ús del certificat X509 en fibjs
introducció de fons
Què és un certificat x509
El certificat x509 és el format de certificat digital més utilitzat en el sistema de servei d'autenticació de clau pública (PKI) basat en estàndards internacionals. Es pot utilitzar per a l'autenticació i el xifratge, i s'utilitza àmpliament en protocols SSL/TLS i altres tipus d'aplicacions de xarxa a Internet. El certificat x509 adopta el mecanisme d'autenticació de clau pública/clau privada i pot garantir la confidencialitat, la integritat i l'autenticitat de la transmissió de dades.
En quins escenaris s'utilitzen els certificats x509?
A Internet, els certificats x509 s'utilitzen més habitualment per a l'autenticació de certificats en el protocol TLS/SSL, assegurant que les dades transmeses entre el client i el servidor es xifren mitjançant un canal segur i s'autentiquen. El certificat x509 també es pot utilitzar per a l'autenticació d'identitat en protocols d'aplicació basats en el xifratge de clau pública i privada, com ara VPN/SSH.
fibjs admet el processament de certificats x509
fibjs admet el processament de certificats x509 i ofereix classes com X509Cert i X509Req al mòdul criptogràfic per llegir, crear i signar certificats. Aquestes classes es poden utilitzar per obtenir informació com ara el període de validesa, la clau pública, l'emissor i el nom del subjecte del certificat, i realitzar operacions com ara signar i verificar el certificat. Al mateix temps, fibjs també proporciona la classe HttpsServer per suportar l'autenticació de certificat HTTPS i les connexions xifrades, cosa que facilita l'ús de certificats x509 en fibjs.
Introducció al mòdul X509
Què és el mòdul X509
Al mòdul criptogràfic de fibjs, es proporcionen classes com X509Cert i X509Req per llegir, crear i signar certificats x509. El mòdul X509 és un mòdul per processar certificats x509, que proporciona operacions com ara l'anàlisi, la creació i la verificació de certificats.
El paper del mòdul X509
La funció del mòdul X509 és operar amb el certificat x509. Mitjançant aquest mòdul, es pot llegir el certificat x509 existent i es pot obtenir informació com ara el període de validesa, la clau pública, l'emissor i el nom del subjecte del certificat. Al mateix temps, el mòdul X509 també pot crear sol·licituds de certificats x509 i signar certificats, com per exemple per a l'autenticació de certificats en el protocol TLS/SSL.
API del mòdul X509
A continuació es mostra una llista de les API més importants del mòdul X509:
- X509Cert: Classe de lectura i manipulació de certificats x509.
- X509Req: Classe per crear sol·licituds de certificat x509.
- verify: Verifiqueu el certificat x509 amb el parell de certificats CA.
- SslServer: una classe que proporciona serveis d'autenticació basats en certificats x509.
- SslSocket: una classe que proporciona operacions d'enviament i recepció de dades basades en serveis d'autenticació basats en certificats x509.
codi de mostra
Aquí teniu el codi d'exemple per llegir el certificat x509 i crear una sol·licitud 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);
El codi d'exemple anterior llegeix un certificat x509 existent a través de la classe X509Cert i mostra el nom del subjecte del certificat. Al mateix temps, el codi d'exemple també mostra com crear una sol·licitud de certificat x509 mitjançant X509Req i envia la informació de la sol·licitud en format PEM.
Ús del mòdul X509
Generar un certificat autofirmat
El procés de generació d'un certificat autofirmat és relativament senzill, en general, cal completar els passos següents:
- Genera PKey (clau privada)
- Genera X509Req (sol·licitud de certificat)
- Utilitzeu X509Req per generar X509Cert (certificat oficial)
- guardar el certificat
Amb aquests passos, podeu generar vosaltres mateixos un certificat x509 per utilitzar-lo en entorns de prova i desenvolupament. La següent és la implementació específica:
Creeu un objecte PKey amb el codi següent. Entre ells, el mètode from() pot crear un objecte PKey mitjançant una cadena en format PEM o un buffer.
1
2const crypto = require('crypto');
const pky = crypto.PKey.from(private_pem);
Creeu un objecte X509Req amb el codi següent. Entre ells, el primer paràmetre de X509Req és el nom distingit del subjecte (Nom del subjecte) i el format de cadena és clau1=valor1, clau2=valor2. El segon paràmetre és l'objecte PKey creat prèviament que s'utilitza per signar el certificat. Per exemple:
1let xrq = new crypto.X509Req("CN=localhost,O=fibjs", pky);
Utilitzeu el codi següent per crear un certificat X509Cert (certificat oficial). L'operació específica és cridar el mètode sign() de X509Req, que accepta tres paràmetres: el nom de l'autoritat de certificació, l'objecte PKey utilitzat per signar i altra informació rellevant. Per exemple, a l'exemple següent, l'objecte X509Req està signat com a certificat autofirmat, l'autoritat de signatura és ella mateixa i el certificat és vàlid durant 10 anys:
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);
Utilitzeu el codi següent per desar el PKey i X509Cert en un fitxer local. Com que el certificat es desa en format PEM, podeu utilitzar el mètode pem() per convertir l'objecte del certificat en una cadena i després desar-lo directament al fitxer:
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
El codi anterior completa tot el procés des de la generació de la clau privada fins a l'emmagatzematge del certificat autofirmat. Aquest certificat es pot utilitzar per provar i desenvolupar aplicacions relacionades amb la seguretat.
certificat de càrrega
La càrrega d'un certificat és una operació important quan s'utilitzen certificats x509. A continuació es descriu com carregar el fitxer de certificat i carregar la clau pública i la clau privada.
Per utilitzar un certificat x509, primer s'ha de llegir el fitxer de certificat a la memòria i convertir-lo en un objecte de certificat x509. Aquests són els passos sobre com carregar el fitxer de certificat:
Al programa JavaScript de fibjs, podeu utilitzar l'API rellevant del mòdul fs per llegir el fitxer. Per exemple, utilitzeu el codi següent per llegir un fitxer de certificat en format PEM:
1
2const fs = require('fs');
const certData = fs.readFile('server.crt');
Després de llegir el fitxer, el contingut del fitxer del certificat s'ha de convertir en un certificat x509 mitjançant l'objecte X509Cert:
1
2const crypto = require('crypto');
const cert = new crypto.X509Cert(certData);
Després dels passos anteriors, es pot carregar el fitxer de certificat x509 local. El certificat també es pot llegir directament mitjançant crypto.loadCert:
1
2const crypto = require('crypto');
const cert = crypto.loadCert('server.crt');
El certificat x509 emmagatzema la clau pública i la informació de la signatura xifrada, de manera que quan s'utilitza el certificat, la clau pública del certificat s'ha d'analitzar per facilitar el xifratge i el desxifrat de dades. La classe PKey converteix una cadena de clau pública/privada en format PEM en un objecte de clau pública/privada. El codi següent es pot utilitzar per llegir una cadena de clau pública/privada en format PEM i crear un objecte PKey:
1
2const privateKey = fs.readFile('private.pem'); // load the data from file
const pKey = crypto.PKey.from(privateKey); // load from pem format data
O utilitzeu crypto.loadPKey per llegir directament:
1
2const crypto = require('crypto');
const pKey = crypto.loadPKey('private.pem');
Després dels passos anteriors, el fitxer de clau pública/clau privada es pot convertir en un objecte PKey.
certificat d'anàlisi
Els certificats són una part important de les interaccions SSL/TLS, s'utilitzen per a l'autenticació i el xifratge de la transmissió de dades. Ara, anem a veure com analitzar un certificat a fibjs.
Podem utilitzar la classe X509Cert del mòdul criptogràfic per construir un objecte de certificat llegint un fitxer de certificat en format DER/PEM i després obtenir informació bàsica del certificat, com ara el nom del subjecte, el nom de l'emissor, el període de validesa, etc. del certificat.
El codi de mostra és el següent:
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}`);
Quan cal utilitzar un certificat, hem de verificar la validesa del certificat, la clau és assegurar-nos que el certificat l'ha emès una organització de confiança. Podeu utilitzar el mètode de verificació a X509Cert per comprovar la validesa del certificat. El mètode de verificació habitual és verificar la cadena de certificats per assegurar-vos que el certificat l'ha emès una CA de confiança.
El codi de mostra és el següent:
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('证书验证通过');
}
En aquest codi d'exemple, primer llegim el certificat CA especificat, generem un objecte X509Cert i, a continuació, utilitzem el mètode de verificació de l'objecte del certificat per verificar el certificat que cal verificar i obtenir el resultat de la verificació. Podeu jutjar si el certificat és legal comparant si el resultat de la verificació és igual a 0. Si el resultat de la verificació no és 0, vol dir que la verificació ha fallat i el certificat s'ha d'aturar en aquest moment.
certificat d'ús
Quan utilitzeu un servidor https, heu d'assegurar-vos que el certificat utilitzat s'ha afegit al servidor. Aquí teniu un exemple senzill que carrega fitxers de certificat i clau privada mitjançant el mòdul criptogràfic:
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();
A l'exemple anterior, vam carregar els fitxers server.crt i server.key mitjançant les funcions loadCert i loadPKey, després vam crear un servei mitjançant l'objecte HttpsServer i vam iniciar el servei amb el certificat i els fitxers de clau carregats.
Notes sobre el mòdul X509
Certificat de seguretat
El mòdul X509 ofereix funcions com la creació i processament de certificats, i s'ha de garantir la seguretat del certificat, la qual cosa requereix una atenció especial als punts següents:
- Seguretat de les claus privades. La clau privada és una part important del certificat i s'ha de protegir estrictament. Durant l'ús del certificat, la clau privada s'ha d'emmagatzemar en un lloc segur tant com sigui possible i els drets d'accés s'han d'establir de manera raonable.
- El transport dels certificats és segur. Durant l'intercanvi i l'ús de certificats, s'ha d'adoptar un mètode de transmissió segur per evitar que els certificats siguin robats o manipulats.
- Seguretat de verificació del certificat. La verificació del certificat és un enllaç important per garantir la validesa i la seguretat del certificat, i s'ha de verificar d'acord amb les regles de verificació del certificat per evitar enganyar els usuaris amb certificats falsificats.
El període de validesa del certificat
El període de validesa d'un certificat fa referència al període des de la data d'emissió del certificat fins a la data de caducitat del certificat. El període de validesa del certificat limita el temps d'ús del certificat. Abans que caduqui el certificat, el titular del certificat pot utilitzar-lo, però després de caducar el certificat, el certificat perdrà la seva validesa.
Per tant, abans d'utilitzar un certificat, cal comprovar el període de validesa del certificat per evitar l'ús d'un certificat caducat. Al mateix temps, abans que caduqui el certificat, s'ha de renovar el més aviat possible per garantir la usabilitat del certificat.
Mecanisme de confiança del certificat
El mecanisme de confiança del certificat és un factor clau per determinar si el client o el servidor poden confiar en el certificat. Normalment, el client o servidor només confia en els certificats emesos i reconeguts per una autoritat de confiança (CA).
Abans que es pugui utilitzar un certificat, s'han de determinar els problemes de confiança amb el certificat. Podeu jutjar si un certificat és fiable comprovant l'autoritat emissora del certificat, el nom distingit del subjecte del certificat, etc.
Mecanisme d'actualització de certificats
El mecanisme de renovació del certificat és un enllaç important per garantir que el certificat sempre sigui vàlid i segur. Normalment, la renovació del certificat inclou principalment dos aspectes:
- Renovació després de l'expiració del certificat. Un cop vençut el certificat, heu de tornar a sol·licitar el certificat, i signar i verificar segons les normes corresponents per garantir la validesa del certificat.
- Pròrrogues i renovacions de certificats. Durant l'ús del certificat, si la informació del certificat s'ha d'ampliar o actualitzar, es pot realitzar tornant a sol·licitar el certificat i realitzant la signatura i verificació.
En resum, el mòdul X509 ofereix funcions com ara la creació i el processament de certificats, i és un enllaç important per garantir la seguretat, la credibilitat i la validesa dels certificats. En el procés d'ús i gestió dels certificats s'han de seguir les normes i requisits corresponents per garantir la validesa i la seguretat dels certificats.