Guía de desarrollo de guías

Uso del certificado X509 en fibjs

introducción de fondo

¿Qué es un certificado x509?

El certificado x509 es el formato de certificado digital más utilizado en el sistema de servicio de autenticación de clave pública (PKI) basado en estándares internacionales. Se puede utilizar para la autenticación y el cifrado, y se utiliza mucho en los protocolos SSL/TLS y otros tipos de aplicaciones de red en Internet. El certificado x509 adopta el mecanismo de autenticación de clave pública/clave privada y puede garantizar la confidencialidad, integridad y autenticidad de la transmisión de datos.

¿En qué escenarios se utilizan los certificados x509?

En Internet, los certificados x509 se utilizan con mayor frecuencia para la autenticación de certificados en el protocolo TLS/SSL, lo que garantiza que los datos transmitidos entre el cliente y el servidor se cifren mediante un canal seguro y se autentican. El certificado x509 también se puede utilizar para la autenticación de identidad en protocolos de aplicación basados ​​en cifrado de clave pública y privada, como VPN/SSH.

fibjs admite el procesamiento de certificados x509

fibjs admite el procesamiento de certificados x509 y proporciona clases como X509Cert y X509Req en el módulo criptográfico para leer, crear y firmar certificados. Estas clases se pueden utilizar para obtener información como el período de validez, la clave pública, el emisor y el nombre del sujeto del certificado, y realizar operaciones como la firma y verificación del certificado. Al mismo tiempo, fibjs también proporciona la clase HttpsServer para admitir la autenticación de certificados HTTPS y las conexiones cifradas, lo que facilita el uso de certificados x509 en fibjs.

Introducción al módulo X509

¿Qué es el módulo X509?

En el módulo criptográfico de fibjs, se proporcionan clases como X509Cert y X509Req para leer, crear y firmar certificados x509. El módulo X509 es un módulo para procesar certificados x509, proporcionando operaciones como analizar, crear y verificar certificados.

El papel del módulo X509

La función del módulo X509 es operar en el certificado x 509. A través de este módulo, se puede leer el certificado x509 existente y se puede obtener información como el período de validez, la clave pública, el emisor y el nombre del sujeto del certificado. Al mismo tiempo, el módulo X509 también puede crear solicitudes de certificados x509 y certificados de firma, como para la autenticación de certificados en el protocolo TLS/SSL.

API del módulo X509

La siguiente es una lista de las API más importantes en el módulo X509:

  • X509Cert: Clase para leer y manipular certificados x509.
  • X509Req: Clase para crear solicitudes de certificados x509.
  • verify: verifique el certificado x509 contra el par de certificados CA.
  • SslServer: una clase que proporciona servicios de autenticación basados ​​en certificados x509.
  • SslSocket: una clase que proporciona operaciones de envío y recepción de datos de socket basadas en servicios de autenticación basados ​​en certificados x509.

Código de muestra

Aquí hay un código de muestra para leer el certificado x509 y crear una solicitud 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);

El código de muestra anterior lee un certificado x509 existente a través de la clase X509Cert y genera el nombre del sujeto del certificado. Al mismo tiempo, el código de ejemplo también demuestra cómo crear una solicitud de certificado x509 a través de X509Req y genera la información de la solicitud en formato PEM.

Uso del módulo X509

Generar un certificado autofirmado

El proceso de generación de un certificado autofirmado es relativamente sencillo, por lo general es necesario completar los siguientes pasos:

  • Generar PKey (clave privada)
  • Generar X509Req (Solicitud de certificado)
  • Use X509Req para generar X509Cert (certificado oficial)
  • guardar certificado

Con estos pasos, puede generar un certificado x509 usted mismo para usarlo en entornos de prueba y desarrollo. La siguiente es la implementación específica:

Cree un objeto PKey con el siguiente código. Entre ellos, el método from() puede crear un objeto PKey a través de una cadena en formato PEM o un Buffer.

1 2
const crypto = require('crypto'); const pky = crypto.PKey.from(private_pem);

Cree un objeto X509Req con el siguiente código. Entre ellos, el primer parámetro de X509Req es el nombre distinguido del sujeto (Nombre del sujeto), y el formato de cadena es clave1=valor1, clave2=valor2. El segundo parámetro es el objeto PKey creado previamente que se usa para firmar el certificado. Por ejemplo:

1
let xrq = new crypto.X509Req("CN=localhost,O=fibjs", pky);

Utilice el siguiente código para crear un X509Cert (certificado oficial). La operación específica es llamar al método sign() de X509Req, que acepta tres parámetros: el nombre de la autoridad certificadora, el objeto PKey utilizado para firmar y otra información relevante. Por ejemplo, en el siguiente ejemplo, el objeto X509Req se firma como un certificado autofirmado, la autoridad de firma es ella misma y el certificado es válido por 10 años:

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 el siguiente código para guardar la PKey y el X509Cert en un archivo local. Dado que el certificado se guarda en formato PEM, puede usar el método pem() para convertir el objeto del certificado en una cadena y luego guardarlo directamente en el archivo:

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

El código anterior completa todo el proceso desde la generación de la clave privada hasta el almacenamiento del certificado autofirmado. Este certificado se puede utilizar para probar y desarrollar aplicaciones relacionadas con la seguridad.

cargar certificado

La carga de un certificado es una operación importante cuando se utilizan certificados x509. A continuación se describe cómo cargar el archivo de certificado y cargar la clave pública y la clave privada.

Para usar un certificado x509, primero se debe leer el archivo del certificado en la memoria y convertirlo en un objeto de certificado x509. Estos son los pasos para cargar el archivo del certificado:

En el programa JavaScript de fibjs, puede usar la API relevante del módulo fs para leer el archivo. Por ejemplo, use el siguiente código para leer un archivo de certificado en formato PEM:

1 2
const fs = require('fs'); const certData = fs.readFile('server.crt');

Después de leer el archivo, el contenido del archivo del certificado debe convertirse en un certificado x509 mediante el objeto X509Cert:

1 2
const crypto = require('crypto'); const cert = new crypto.X509Cert(certData);

Después de los pasos anteriores, se puede cargar el archivo de certificado x509 local. El certificado también se puede leer directamente usando crypto.loadCert:

1 2
const crypto = require('crypto'); const cert = crypto.loadCert('server.crt');

El certificado x509 almacena la clave pública y la información de la firma cifrada, por lo que al usar el certificado, la clave pública del certificado debe analizarse para facilitar el cifrado y descifrado de datos. La clase PKey convierte una cadena de clave pública/privada en formato PEM en un objeto de clave pública/privada. El siguiente código se puede usar para leer una cadena de clave pública/privada en formato PEM y crear un objeto 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

O use crypto.loadPKey para leer directamente:

1 2
const crypto = require('crypto'); const pKey = crypto.loadPKey('private.pem');

Después de los pasos anteriores, el archivo de clave pública/clave privada se puede convertir en un objeto PKey.

certificado de análisis

Los certificados son una parte importante de las interacciones SSL/TLS y se utilizan para la autenticación y el cifrado de la transmisión de datos. Ahora, veamos cómo analizar un certificado en fibjs.

Podemos usar la clase X509Cert del módulo criptográfico para construir un objeto de certificado leyendo un archivo de certificado en formato DER/PEM y luego obtener información básica del certificado, como el nombre del sujeto, el nombre del emisor, el período de validez, etc. del certificado

El código de ejemplo es el siguiente:

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}`);

Cuando se necesita usar un certificado, necesitamos verificar la validez del certificado. La clave es asegurarse de que el certificado sea emitido por una organización confiable. Puede usar el método de verificación en X509Cert para verificar la validez del certificado. El método de verificación común es verificar la cadena de certificados para garantizar que el certificado sea emitido por una CA de confianza.

El código de ejemplo es el siguiente:

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('证书验证通过'); }

En este código de muestra, primero leemos el certificado de CA especificado, generamos un objeto X509Cert, luego usamos el método de verificación en el objeto de certificado para verificar el certificado que se va a verificar y obtener el resultado de la verificación. Puede juzgar si el certificado es legal comparando si el resultado de la verificación es igual a 0. Si el resultado de la verificación no es 0, significa que la verificación falló y el certificado debe detenerse en este momento.

certificado de uso

Al usar un servidor https, debe asegurarse de que el certificado utilizado se haya agregado al servidor. Aquí hay un ejemplo simple que carga archivos de certificados y claves privadas a través del 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();

En el ejemplo anterior, cargamos los archivos server.crt y server.key a través de las funciones loadCert y loadPKey, luego creamos un servicio usando el objeto HttpsServer e iniciamos el servicio con el certificado y los archivos clave cargados.

Notas sobre el módulo X509

Seguridad del certificado

El módulo X509 proporciona funciones como la creación y procesamiento de certificados, y se debe garantizar la seguridad del certificado, lo que requiere especial atención a los siguientes puntos:

  • Seguridad de claves privadas. La clave privada es una parte importante del certificado y debe protegerse estrictamente. Durante el uso del certificado, la clave privada debe almacenarse en un lugar seguro tanto como sea posible, y los derechos de acceso deben establecerse de manera razonable.
  • El transporte de certificados es seguro. Durante el intercambio y uso de certificados, se debe adoptar un método de transmisión seguro para evitar que los certificados sean robados o manipulados.
  • Certificado de verificación de seguridad. La verificación del certificado es un vínculo importante para garantizar la validez y la seguridad del certificado, y debe verificarse en estricta conformidad con las reglas de verificación del certificado para evitar engañar a los usuarios con certificados falsificados.

El período de validez del certificado.

El período de validez de un certificado se refiere al período desde la fecha de emisión del certificado hasta la fecha de vencimiento del certificado. El período de validez del certificado limita el tiempo de uso del certificado. Antes de que caduque el certificado, el titular del certificado puede utilizar el certificado, pero después de que caduque, el certificado perderá su validez.

Por lo tanto, antes de usar un certificado, debe verificar el período de validez del certificado para evitar usar un certificado caducado. Al mismo tiempo, antes de que caduque el certificado, el certificado debe renovarse lo antes posible para garantizar la usabilidad del certificado.

Mecanismo de confianza del certificado

El mecanismo de confianza del certificado es un factor clave para determinar si el cliente o el servidor pueden confiar en el certificado. Normalmente, el cliente o servidor solo confía en los certificados emitidos y reconocidos por una autoridad de confianza (CA).

Antes de que se pueda usar un certificado, se deben determinar los problemas de confianza con el certificado. Puede juzgar si un certificado es fiable comprobando la autoridad emisora ​​del certificado, el nombre distinguido del sujeto del certificado, etc.

Mecanismo de actualización de certificados

El mecanismo de renovación de certificados es un vínculo importante para garantizar que el certificado sea siempre válido y seguro. Normalmente, la renovación del certificado incluye principalmente dos aspectos:

  • Renovación después de la caducidad del certificado. Después de que caduque el certificado, debe volver a solicitar el certificado y firmar y verificar de acuerdo con las reglas correspondientes para garantizar la validez del certificado.
  • Ampliaciones y renovaciones de certificados. Durante el uso del certificado, si es necesario ampliar o actualizar la información del certificado, se puede realizar volviendo a solicitar el certificado y realizando la firma y la verificación.

En resumen, el módulo X509 brinda funciones como la creación y procesamiento de certificados, y es un enlace importante para garantizar la seguridad, credibilidad y validez de los certificados. En el proceso de uso y gestión de certificados, se deben seguir las normas y requisitos correspondientes para garantizar la validez y seguridad de los certificados.

👉【Agregar módulo nativo