Guía de desenvolvemento da guía

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 12
const 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 2
const 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:

1
let 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 5
const 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 5
const 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 2
const 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 2
const 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 2
const 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 2
const 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 2
const 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 14
const 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 9
const 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 10
const 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.

👉【Engadir módulo nativo