Uso de certificados X509 en fibjs
Introducción a los antecedentes
¿Qué es un certificado x509?
El certificado x509 es el formato de certificado digital más utilizado en el sistema del servicio de autenticación de clave pública (PKI) basado en estándares internacionales. Puede usarse para autenticación y cifrado, y se usa ampliamente en protocolos SSL/TLS y otros tipos de aplicaciones de red en Internet. El certificado x509 utiliza un 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 utiliza el certificado x509?
En Internet, el escenario más utilizado para los certificados x509 es la autenticación de certificados en el protocolo TLS/SSL para garantizar que los datos transmitidos entre el cliente y el servidor se cifren mediante un canal seguro y se verifiquen. Los certificados x509 también se pueden 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 realizar operaciones como leer, crear y firmar certificados. Puede utilizar estas clases para obtener el período de validez del certificado, la clave pública, el emisor, el nombre del sujeto y otra información, así como realizar operaciones como firmar y verificar el certificado. Al mismo tiempo, fibjs también proporciona la clase HttpsServer para admitir la autenticación de certificados HTTPS y 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 realizar operaciones como leer, crear y firmar certificados x509. El módulo X509 es un módulo para procesar certificados x509 y proporciona operaciones como análisis, creación y verificación de certificados.
La función del módulo X509
La función del módulo X509 es operar el certificado x509. Puede utilizar este módulo para leer el certificado x509 existente y obtener el período de validez, la clave pública, el emisor, el nombre del sujeto y otra información del certificado. Al mismo tiempo, el módulo X509 también puede crear solicitudes de certificados x509 y firmar certificados, como para la autenticación de certificados en protocolos TLS/SSL.
API del módulo X509
La siguiente es una lista de las API más importantes del módulo X509:
- X509Cert: Clase para leer y manipular certificados x509.
- X509Req: Clase utilizada para crear solicitudes de certificados x509.
- verify: Verifique el certificado x509 mediante un par de certificados CA.
- SslServer: clase que proporciona servicios de autenticación basados en certificados x509.
- SslSocket: clase que proporciona operaciones de envío y recepción de datos por socket para servicios de autenticación basados en certificados x509.
Código de muestra
El siguiente es un código de muestra para leer un certificado x509 y crear una solicitud 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);
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 muestra 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 certificado autofirmado
El proceso de generación de un certificado autofirmado es relativamente sencillo, generalmente es necesario completar los siguientes pasos:
- Generar PKey (clave privada)
- Generar X509Req (solicitud de certificado)
- Utilice X509Req para generar X509Cert (certificado formal)
- guardar certificado
Siguiendo estos pasos, puede generar su propio certificado x509 para usarlo en entornos de prueba y desarrollo. La siguiente es la implementación específica:
Utilice el siguiente código para crear un objeto PKey. Entre ellos, el método from() puede crear un objeto PKey a través de una cadena en formato PEM o un Buffer.
1
2const crypto = require('crypto');
const pky = crypto.PKey.from(private_pem);
Utilice el siguiente código para crear un objeto X509Req. 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 anteriormente, utilizado para la firma de certificados. Por ejemplo:
1let 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 la firma y otra información relacionada. Por ejemplo, en el siguiente ejemplo, el objeto X509Req está firmado con un certificado autofirmado, la autoridad de firma es ella misma y el certificado es válido por 10 años:
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);
Utilice el siguiente código para guardar PKey y X509Cert en un archivo local. Dado que el certificado se guarda en formato PEM, puede utilizar el método pem() para convertir el objeto del certificado en una cadena y luego guardarlo directamente en el archivo:
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 código anterior completa todo el proceso, desde generar una clave privada hasta almacenar un certificado autofirmado. Las aplicaciones relacionadas con la seguridad se pueden probar y desarrollar con este certificado.
Certificado de carga
Cargar el 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 las claves públicas y privadas.
Para utilizar 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 sobre cómo cargar el archivo de certificado:
En el programa JavaScript fibjs, puede utilizar la API relevante del módulo fs para leer archivos. Por ejemplo, utilice el siguiente código para leer un archivo de certificado en formato PEM:
1
2const 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 utilizando el objeto X509Cert:
1
2const crypto = require('crypto');
const cert = new crypto.X509Cert(certData);
Después de los pasos anteriores, puede cargar el archivo de certificado x509 local. También puedes usar crypto.loadCert para leer el certificado directamente:
1
2const 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 cuando se utiliza el certificado, es necesario analizar la clave pública en el certificado para facilitar el cifrado y descifrado de datos. La clase PKey puede convertir cadenas de claves públicas/privadas en formato PEM en objetos de claves públicas/privadas. Puede utilizar el siguiente código para leer la cadena de clave pública/privada en formato PEM y crear un objeto 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 use crypto.loadPKey para leer directamente:
1
2const crypto = require('crypto');
const pKey = crypto.loadPKey('private.pem');
Después de los pasos anteriores, el archivo de clave pública/privada se puede convertir en un objeto PKey.
Certificado de análisis
Los certificados son un componente importante de las interacciones SSL/TLS y se utilizan para la autenticación y el cifrado de la transmisión de datos. Ahora, aprendamos 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 sobre el certificado, como obtener el nombre del sujeto del certificado, el nombre del emisor, el período de validez, etc. .
El código de muestra es el siguiente:
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}`);
Cuando necesitamos utilizar un certificado, debemos verificar la legitimidad del certificado. La clave es asegurarnos de que el certificado sea emitido por una organización confiable. Puede utilizar el método de verificación en X509Cert para verificar la validez del certificado. Un método de verificación común es verificar la cadena de certificados para garantizar que el certificado sea emitido por una CA confiable.
El código de muestra es el siguiente:
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 este código de muestra, primero leemos el certificado de CA especificado, generamos un objeto X509Cert y luego usamos el método de verificación en el objeto de certificado para verificar el certificado que debe verificarse y obtener el resultado de la verificación. Puede determinar si el certificado es legítimo 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 se debe dejar de utilizar el certificado.
Usar certificado
Cuando utilice un servidor https, debe asegurarse de que el certificado utilizado se haya agregado al servidor. A continuación se muestra un ejemplo sencillo de cómo cargar archivos de certificado y clave privada a través del 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();
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 cargado y los archivos de clave.
Notas sobre el módulo X509
Seguridad del certificado
El módulo X509 proporciona funciones como la creación y procesamiento de certificados, 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 estar estrictamente protegida. Durante el uso de certificados, la clave privada debe almacenarse en un lugar lo más seguro posible y los permisos de acceso deben establecerse adecuadamente.
- La transmisión de certificados es segura. Durante el intercambio y uso de certificados, se deben utilizar métodos de transmisión seguros para evitar que los certificados sean robados o manipulados.
- La verificación del certificado es segura. La verificación del certificado es un paso importante para garantizar la validez y seguridad del certificado y debe llevarse a cabo en estricta conformidad con las reglas de verificación de certificados para evitar que los certificados falsificados engañen a los usuarios.
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 mismo. El período de validez del certificado limita el tiempo de uso del certificado. Antes de que caduque, el titular del certificado puede usarlo, pero después de que caduque, el certificado perderá su validez.
Por lo tanto, antes de utilizar un certificado, debe comprobar el período de validez del mismo para evitar utilizar un certificado caducado. Al mismo tiempo, el certificado debe actualizarse lo antes posible antes de que caduque para garantizar la disponibilidad 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 puede confiar en el certificado. Normalmente, el cliente o servidor sólo confía en los certificados firmados y reconocidos por una autoridad de confianza (CA).
Antes de utilizar un certificado, debe determinar los problemas de confianza del certificado. Puede determinar si un certificado es confiable verificando la autoridad emisora del certificado, el nombre distinguido del sujeto del certificado, etc.
Mecanismo de renovación de certificados
El mecanismo de renovación del certificado es una parte importante para garantizar que el certificado siga siendo válido y seguro. Normalmente, la renovación del certificado incluye principalmente dos aspectos:
- Renovación después del vencimiento del certificado. Una vez que caduque el certificado, debe volver a solicitarlo y firmarlo y verificarlo de acuerdo con las reglas correspondientes para garantizar la validez del certificado.
- Ampliaciones y renovaciones de certificados. Durante el uso del certificado, si necesita ampliar o actualizar la información del certificado, puede hacerlo volviendo a solicitar el certificado, firmándolo y verificándolo.
En resumen, el módulo X509 proporciona creación, procesamiento y otras funciones de certificados, y es un vínculo importante para garantizar la seguridad, confiabilidad y validez de los certificados. En el proceso de uso y gestión de certificados, se deben seguir las reglas y requisitos correspondientes para garantizar la validez y seguridad del certificado.