Ús de certificats 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 utilitza un 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'utilitza el certificat x509?
A Internet, l'escenari més utilitzat per als certificats x509 és l'autenticació de certificats en el protocol TLS/SSL per garantir que les dades transmeses entre el client i el servidor es xifren mitjançant un canal segur i es verifiquen. Els certificats x509 també es poden 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 proporciona classes com X509Cert i X509Req al mòdul criptogràfic per realitzar operacions com ara llegir, crear i signar certificats. Podeu utilitzar aquestes classes per obtenir el període de validesa del certificat, la clau pública, l'emissor, el nom del subjecte i altra informació, així com 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 realitzar operacions com 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.
La funció del mòdul X509
La funció del mòdul X509 és operar el certificat x509. Podeu utilitzar aquest mòdul per llegir el certificat x509 existent i obtenir el període de validesa, la clau pública, l'emissor, el nom del subjecte i altra informació del certificat. Al mateix temps, el mòdul X509 també pot crear sol·licituds de certificat x509 i signar certificats, com per exemple per a l'autenticació de certificats en protocols 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 utilitzada per crear sol·licituds de certificat x509.
- verify: Verifiqueu el certificat x509 mitjançant un 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 de sòcols per a serveis d'autenticació basats en certificats x509.
Exemple de codi
El següent és un exemple de codi per llegir un 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 emet la informació de la sol·licitud en format PEM.
Ús del mòdul X509
Generar certificat autofirmat
El procés de generació d'un certificat autofirmat és relativament senzill. En general, heu de completar els passos següents:
- Genera PKey (clau privada)
- Genera X509Req (sol·licitud de certificat)
- Utilitzeu X509Req per generar X509Cert (certificat formal)
- guardar el certificat
Amb aquests passos, podeu generar el vostre propi certificat x509 per utilitzar-lo en entorns de prova i desenvolupament. La següent és la implementació específica:
Utilitzeu el codi següent per crear un objecte PKey. Entre ells, el mètode from() pot crear un objecte PKey mitjançant una cadena de format PEM o un buffer.
1
2const crypto = require('crypto');
const pky = crypto.PKey.from(private_pem);
Utilitzeu el codi següent per crear un objecte X509Req. 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 anteriorment, utilitzat per a la signatura de certificats. 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 al 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ó relacionada. Per exemple, a l'exemple següent, l'objecte X509Req està signat amb un 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ó d'una clau privada fins a l'emmagatzematge d'un certificat autofirmat. Amb aquest certificat es poden provar i desenvolupar aplicacions relacionades amb la seguretat.
Certificat de càrrega
La càrrega del certificat és una operació important quan s'utilitzen certificats x509. A continuació es descriu com carregar el fitxer de certificat i carregar les claus públiques i privades.
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 fibjs, podeu utilitzar l'API rellevant del mòdul fs per llegir fitxers. 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, podeu carregar el fitxer de certificat x509 local. També podeu utilitzar crypto.loadCert per llegir el certificat directament:
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. Per tant, quan utilitzeu el certificat, heu d'analitzar la clau pública del certificat per facilitar el xifratge i el desxifrat de dades. La classe PKey pot convertir cadenes de clau pública/privada en format PEM en objectes de clau pública/privada. Podeu utilitzar el codi següent per llegir la 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/privada es pot convertir en un objecte PKey.
Certificat d'anàlisi
Els certificats són un component important de les interaccions SSL/TLS, utilitzats per a l'autenticació i el xifratge de la transmissió de dades. Ara, aprenem a 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 sobre el certificat, com ara l'obtenció del nom del subjecte del certificat, el nom de l'emissor, el període de validesa, etc.
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 necessitem utilitzar un certificat, hem de verificar la legitimitat 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. Un 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 després 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 determinar si el certificat és legítim 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 s'hauria de deixar d'utilitzar el certificat.
Utilitza el certificat
Quan utilitzeu un servidor https, heu d'assegurar-vos que el certificat utilitzat s'ha afegit al servidor. Aquí teniu un exemple senzill de càrrega de 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 el processament de certificats, s'ha de garantir la seguretat del certificat, per això cal 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 dels certificats, la clau privada s'ha d'emmagatzemar en un lloc segur tant com sigui possible i els permisos d'accés s'han de configurar adequadament.
- La transmissió de certificats és segura. Durant l'intercanvi i l'ús de certificats, s'han d'utilitzar mètodes de transmissió segurs per evitar que els certificats siguin robats o manipulats.
- La verificació del certificat és segura. La verificació del certificat és un pas important per garantir la validesa i la seguretat del certificat. La verificació s'ha de dur a terme d'acord estricte amb les normes de verificació del certificat per evitar que els certificats falsificats indueixin a error als usuaris.
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, el certificat s'ha d'actualitzar tan aviat com sigui possible abans que caduqui per garantir la disponibilitat 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 signats i reconeguts per una autoritat de confiança (CA).
Abans d'utilitzar un certificat, heu de determinar els problemes de confiança del certificat. Podeu determinar si un certificat és fiable comprovant l'autoritat emissora del certificat, el nom distintiu del subjecte del certificat, etc.
Mecanisme de renovació del certificat
El mecanisme de renovació del certificat és una part important per garantir que el certificat segueixi sent 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, cal tornar a sol·licitar el certificat i signar-lo i verificar-lo segons les normes corresponents per garantir la validesa del certificat.
- Pròrrogues i renovacions de certificats. Durant l'ús del certificat, si necessiteu ampliar o actualitzar la informació del certificat, podeu fer-ho tornant a sol·licitar el certificat i signant-lo i verificant-lo.
En resum, el mòdul X509 ofereix funcions de creació, processament i altres de certificats, i és un enllaç important per garantir la seguretat, la fiabilitat 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 del certificat.