Uso de certificados X509 en fibjs
Introdución de antecedentes
Que é un certificado x509
O certificado x509 é o formato de certificado dixital máis usado no sistema de servizo de autenticación de clave pública (PKI) baseado en estándares internacionais. Pódese usar para a autenticación e o cifrado, e úsase amplamente nos protocolos SSL/TLS e noutros tipos de aplicacións de rede en Internet. O certificado x509 utiliza un mecanismo de autenticación de chave pública/chave privada e pode garantir a confidencialidade, a integridade e a autenticidade da transmisión de datos.
En que escenarios se usa o certificado x509?
En Internet, o escenario máis utilizado para os certificados x509 é a autenticación de certificados no protocolo TLS/SSL para garantir que os datos transmitidos entre o cliente e o servidor se cifran mediante unha canle segura e se verifican. Os certificados x509 tamén se poden usar para a autenticación de identidade en protocolos de aplicación baseados no cifrado de clave pública e privada, como VPN/SSH.
fibjs admite o procesamento de certificados x509
fibjs admite o procesamento de certificados x509 e ofrece clases como X509Cert e X509Req no módulo criptográfico para realizar operacións como ler, crear e asinar certificados. Podes usar estas clases para obter o período de validez do certificado, a clave pública, o emisor, o nome do asunto e outra información, así como realizar operacións como asinar e verificar o certificado. Ao mesmo tempo, fibjs tamén ofrece a clase HttpsServer para admitir a autenticación de certificado HTTPS e as conexións cifradas, o que facilita o uso de certificados x509 en fibjs.
Introdución ao módulo X509
Que é o módulo X509?
No módulo criptográfico de fibjs, ofrécense clases como X509Cert e X509Req para realizar operacións como ler, crear e asinar certificados x509. O módulo X509 é un módulo para procesar certificados x509, que ofrece operacións como análise, creación e verificación de certificados.
A función do módulo X509
A función do módulo X509 é operar o certificado x509. Podes usar este módulo para ler o certificado x509 existente e obter o período de validez, a clave pública, o emisor, o nome do asunto e outra información do certificado. Ao mesmo tempo, o módulo X509 tamén pode crear solicitudes de certificados x509 e asinar certificados, como para a autenticación de certificados en protocolos TLS/SSL.
API do módulo X509
A seguinte é unha lista das API máis importantes do módulo X509:
- X509Cert: Clase de lectura e manipulación de certificados x509.
- X509Req: Clase utilizada para crear solicitudes de certificado x509.
- verify: Verifique o certificado x509 mediante un par de certificados de CA.
- SslServer: unha clase que ofrece servizos de autenticación baseados en certificados x509.
- SslSocket: unha clase que proporciona operacións de envío e recepción de datos de socket para servizos de autenticación baseados en certificados x509.
Código de mostra
O seguinte é un código de exemplo para ler un certificado x509 e crear unha solicitude de certificado 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);
O código de exemplo anterior le un certificado x509 existente a través da clase X509Cert e mostra o nome do asunto do certificado. Ao mesmo tempo, o código de mostra tamén demostra como crear unha solicitude de certificado x509 a través de X509Req e emite a información da solicitude en formato PEM.
Uso do módulo X509
Xerar certificado autoasinado
O proceso de xeración dun certificado autoasinado é relativamente sinxelo. Polo xeral, debes completar os seguintes pasos:
- Xerar PKey (chave privada)
- Xerar X509Req (solicitude de certificado)
- Use X509Req para xerar X509Cert (certificado formal)
- gardar o certificado
Usando estes pasos, pode xerar o seu propio certificado x509 para usar en ambientes de proba e desenvolvemento. A seguinte é a implementación específica:
Use o seguinte código para crear un obxecto PKey. Entre eles, o método from() pode crear un obxecto PKey mediante unha cadea de formato PEM ou un búfer.
1
2const crypto = require('crypto');
const pky = crypto.PKey.from(private_pem);
Use o seguinte código para crear un obxecto X509Req. Entre eles, o primeiro parámetro de X509Req é o nome distinguido do asunto (Nome do asunto) e o formato de cadea é key1=value1,key2=value2. O segundo parámetro é o obxecto PKey creado anteriormente, usado para a sinatura do certificado. Por exemplo:
1let xrq = new crypto.X509Req("CN=localhost,O=fibjs", pky);
Use o seguinte código para crear un certificado X509Cert (certificado oficial). A operación específica é chamar ao método sign() de X509Req, que acepta tres parámetros: o nome da autoridade de certificación, o obxecto PKey utilizado para asinar e outra información relacionada. Por exemplo, no seguinte exemplo, o obxecto X509Req está asinado cun certificado autoasinado, a autoridade de sinatura é ela mesma e o certificado é válido durante 10 anos:
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);
Use o seguinte código para gardar o PKey e o X509Cert nun ficheiro local. Dado que o certificado está gardado en formato PEM, pode usar o método pem() para converter o obxecto do certificado nunha cadea e despois gardalo directamente no ficheiro:
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
O código anterior completa todo o proceso desde a xeración dunha clave privada ata o almacenamento dun certificado autoasinado. Con este certificado pódense probar e desenvolver aplicacións relacionadas coa seguridade.
Certificado de carga
A carga do certificado é unha operación importante cando se usan certificados x509. A continuación descríbese como cargar o ficheiro de certificado e cargar as claves públicas e privadas.
Para utilizar un certificado x509, primeiro debe ler o ficheiro de certificado na memoria e converterse nun obxecto de certificado x509. Estes son os pasos sobre como cargar o ficheiro de certificado:
No programa JavaScript fibjs, pode usar a API relevante do módulo fs para ler ficheiros. Por exemplo, use o seguinte código para ler un ficheiro de certificado en formato PEM:
1
2const fs = require('fs');
const certData = fs.readFile('server.crt');
Despois de ler o ficheiro, o contido do ficheiro do certificado debe converterse nun certificado x509 usando o obxecto X509Cert:
1
2const crypto = require('crypto');
const cert = new crypto.X509Cert(certData);
Despois dos pasos anteriores, pode cargar o ficheiro de certificado x509 local. Tamén podes usar crypto.loadCert para ler o certificado directamente:
1
2const crypto = require('crypto');
const cert = crypto.loadCert('server.crt');
O certificado x509 almacena a clave pública e a información de sinatura cifrada. Polo tanto, ao usar o certificado, cómpre analizar a clave pública no certificado para facilitar o cifrado e descifrado dos datos. A clase PKey pode converter cadeas de clave pública/privada en formato PEM en obxectos de chave pública/privada. Podes usar o seguinte código para ler a cadea de clave pública/privada en formato PEM e crear un obxecto 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 use crypto.loadPKey para ler directamente:
1
2const crypto = require('crypto');
const pKey = crypto.loadPKey('private.pem');
Despois dos pasos anteriores, o ficheiro de chave pública/privada pódese converter nun obxecto PKey.
Certificado de análise
Os certificados son un compoñente importante das interaccións SSL/TLS, utilizados para a autenticación e o cifrado da transmisión de datos. Agora, imos aprender a analizar un certificado en fibjs.
Podemos usar a clase X509Cert do módulo criptográfico para construír un obxecto de certificado lendo un ficheiro de certificado en formato DER/PEM e, a continuación, obter información básica sobre o certificado, como a obtención do nome do asunto do certificado, o nome do emisor, o período de validez, etc.
O código de mostra é o seguinte:
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}`);
Cando necesitamos utilizar un certificado, necesitamos verificar a lexitimidade do certificado. A clave é asegurarnos de que o certificado é emitido por unha organización de confianza. Podes usar o método de verificación en X509Cert para comprobar a validez do certificado. Un método común de verificación é verificar a cadea de certificados para garantir que o certificado é emitido por unha CA de confianza.
O código de mostra é o seguinte:
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('证书验证通过');
}
Neste código de exemplo, primeiro lemos o certificado CA especificado, xeramos un obxecto X509Cert e, a continuación, usamos o método de verificación no obxecto de certificado para verificar o certificado que hai que verificar e obter o resultado da verificación. Pode determinar se o certificado é lexítimo comparando se o resultado da verificación é igual a 0. Se o resultado da verificación non é 0, significa que a verificación fallou e que se debe deixar de usar o certificado.
Usa certificado
Cando se utiliza un servidor https, cómpre asegurarse de que o certificado utilizado foi engadido ao servidor. Aquí tes un exemplo sinxelo de carga de ficheiros de certificado e clave privada a través do módulo criptográfico:
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();
No exemplo anterior, cargamos os ficheiros server.crt e server.key a través das funcións loadCert e loadPKey, despois creamos un servizo mediante o obxecto HttpsServer e iniciamos o servizo co certificado e os ficheiros de clave cargados.
Notas sobre o módulo X509
Certificado de seguridade
O módulo X509 ofrece funcións como a creación e o procesamento de certificados. A seguridade do certificado debe estar garantida, o que require especial atención aos seguintes puntos:
- Seguridade das claves privadas. A clave privada é unha parte importante do certificado e debe estar estrictamente protexida. Durante o uso de certificados, a clave privada debe almacenarse nun lugar seguro na medida do posible e os permisos de acceso deben establecerse adecuadamente.
- A transmisión de certificados é segura. Durante o intercambio e uso de certificados, débense utilizar métodos de transmisión seguros para evitar que os certificados sexan roubados ou manipulados.
- A verificación do certificado é segura. A verificación do certificado é un paso importante para garantir a validez e a seguridade do certificado. A verificación debe realizarse de acordo coas regras de verificación do certificado para evitar que os certificados falsificados induzan a erro aos usuarios.
Período de validez do certificado
O período de validez dun certificado refírese ao período desde a data de emisión do certificado ata a data de caducidade do certificado. O período de validez do certificado limita o tempo de uso do certificado. Antes de que caduque o certificado, o titular do certificado pode usar o certificado, pero despois de que caduque o certificado, o certificado perderá a súa validez.
Polo tanto, antes de utilizar un certificado, debe comprobar o período de validez do certificado para evitar utilizar un certificado caducado. Ao mesmo tempo, o certificado debe actualizarse o antes posible antes de que caduque para garantir a dispoñibilidade do certificado.
Mecanismo de confianza de certificados
O mecanismo de confianza do certificado é un factor clave para determinar se o cliente ou o servidor poden confiar no certificado. Normalmente, o cliente ou servidor só confía nos certificados asinados e recoñecidos por unha autoridade de confianza (CA).
Antes de usar un certificado, debes determinar os problemas de confianza do certificado. Pode determinar se un certificado é fiable comprobando a autoridade emisora do certificado, o nome distintivo do suxeito do certificado, etc.
Mecanismo de renovación de certificados
O mecanismo de renovación do certificado é unha parte importante para garantir que o certificado siga sendo válido e seguro. Normalmente, a renovación do certificado inclúe principalmente dous aspectos:
- Renovación despois da expiración do certificado. Unha vez caducado o certificado, debes volver solicitar o certificado e asinalo e verificalo segundo as normas correspondentes para garantir a validez do certificado.
- Ampliación e renovación de certificados. Durante o uso do certificado, se precisa ampliar ou actualizar a información do certificado, pode facelo solicitando de novo o certificado e asinándoo e verificándoo.
En resumo, o módulo X509 ofrece funcións de creación, procesamento e outras de certificados, e é un vínculo importante para garantir a seguridade, a fiabilidade e a validez dos certificados. No proceso de utilización e xestión dos certificados, deben seguirse as normas e requisitos correspondentes para garantir a validez e seguridade do certificado.