Módulo módulo básico

módulo ssl

El módulo SSL es un módulo de cifrado integrado de fibjs, que se puede utilizar para establecer el protocolo de transferencia de hipertexto SSL de una conexión de red. Este módulo proporciona verificación criptográfica para que los clientes y servidores puedan garantizar que la conexión sea segura.

El módulo SSL contiene múltiples objetos y constantes que se pueden utilizar para un proceso completo de comunicación cliente/servidor SSL. Las categorías más utilizadas son:

  1. SslSocket: Basado en el subyacenteSocketEl objeto de socket SSL encapsulado se puede utilizar para realizar autenticación bidireccional y otras operaciones de comunicación con el servidor remoto.
  2. SslHandler: Procesador de conversión de protocolo SSL, utilizado para convertir flujos de datos en protocolos de flujo SSL, adecuado para crear servicios del lado del servidor.
  3. SslServer: Objeto de servidor SSL, conveniente para crear un servidor SSL multifibra estándar.

Lo siguiente esssl.ServerComo ejemplo, presentamos el uso del módulo SSL.

ssl.ServerEs un servidor SSL básico que proporciona un servicio de red basado en SSL. usarssl.ServerLa clase puede crear rápidamente un servidor basado en SSL/TLS y es compatible básicamente con todas las características de los servicios TCP/HTTP. Tiene las siguientes características:

  • Viene con un administrador de certificados X.509 que admite múltiples certificados de nombres de dominio, comodines, certificados SAN y otras funciones.
  • Tiene la misma interfaz y uso que el servidor TCP, y el código de la capa superior no necesita preocuparse por la diferencia entre una conexión SSL y una conexión TCP.
  • Todos los protocolos de seguridad SSL/TLS se implementan utilizando la biblioteca OpenSSL incorporada.
  • Admite funciones de extensión de protocolo como SNI y ALPN.

He aquí un ejemplo sencillo:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
const ssl = require('ssl'); const http = require('http'); const crypto = require('crypto'); // read cert and key let key = crypto.loadPKey('mycert.key'); let cert = crypto.loadCert('mycert.pem'); // create ssl server const svr = new ssl.Server(cert, key, 8080, s => { var data; while (data = s.read()) { console.log(`received data: ${data.toString()}`); s.write(data.toString().toUpperCase()); } }); // start server svr.start();

En el código anterior, primero leemos el certificado SSL y los archivos de clave privada, y luego creamos una instancia de servidor SSL. En la función de devolución de llamada del servidor, después de recibir los datos del cliente, convierta los datos a mayúsculas y devuélvalos al cliente a través de la función de escritura.

objeto

Socket

CrearSslSocketobjeto, verSslSocket

1
SslSocket ssl.Socket;

Handler

CrearSslHandlerobjeto, verSslHandler

1
SslHandler ssl.Handler;

Server

CrearSslServerobjeto, verSslServer

1
SslServer ssl.Server;

función estática

connect

CrearSslSocketobjeto y establecer conexión

1 2
static Stream ssl.connect(String url, Integer timeout = 0) async;

Parámetros de llamada:

  • url: Cadena, especifica el protocolo de conexión, que puede ser: ssl://host:puerto
  • timeout: Entero, especifica el tiempo de espera, la unidad es milisegundos, el valor predeterminado es 0

Resultados de devolución:


CrearSslSocketobjeto y establecer conexión

1 2 3 4
static Stream ssl.connect(String url, X509Cert crt, PKey key, Integer timeout = 0) async;

Parámetros de llamada:

  • url: Cadena, especifica el protocolo de conexión, que puede ser: ssl://host:puerto
  • crt:X509Cert, certificado, utilizado para enviar al servidor para verificar al cliente
  • key:PKey, clave privada, utilizada para hablar con el cliente.
  • timeout: Entero, especifica el tiempo de espera, la unidad es milisegundos, el valor predeterminado es 0

Resultados de devolución:


CrearSslSocketobjeto y establecer conexión

1 2 3 4 5
static Stream ssl.connect(String url, Integer verification, X509Cert crt, PKey key, Integer timeout = 0) async;

Parámetros de llamada:

  • url: Cadena, especifica el protocolo de conexión, que puede ser: ssl://host:puerto
  • verification: Entero, modo de verificación de certificado
  • crt:X509Cert, certificado, utilizado para enviar al servidor para verificar al cliente
  • key:PKey, clave privada, utilizada para hablar con el cliente.
  • timeout: Entero, especifica el tiempo de espera, la unidad es milisegundos, el valor predeterminado es 0

Resultados de devolución:


setClientCert

Establecer certificado de cliente predeterminado

1 2
static ssl.setClientCert(X509Cert crt, PKey key);

Parámetros de llamada:

  • crt:X509Cert, certificado, utilizado para enviar al servidor para verificar al cliente
  • key:PKey, clave privada, utilizada para hablar con el cliente.

loadRootCerts

Cargue el certificado raíz predeterminado que viene con él, que equivale assl.ca.loadRootCerts

1
static ssl.loadRootCerts();

El contenido de este certificado proviene de: http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt

propiedades estáticas

ca

X509Cert, certificado global, utilizado para el certificado del servidor de verificación del modo cliente SSL

1
static readonly X509Cert ssl.ca;

verification

Entero, configure el modo de verificación del certificado, el valor predeterminado es VERIFY_REQUIRED

1
static Integer ssl.verification;

constante

VERIFY_NONE

Modo de verificación de certificado, sin verificación

1
const ssl.VERIFY_NONE = 0;

VERIFY_OPTIONAL

Modo de verificación de certificado, verificación opcional, que permite que la verificación falle

1
const ssl.VERIFY_OPTIONAL = 1;

VERIFY_REQUIRED

Modo de verificación de certificado, que requiere verificación y se interrumpirá si la verificación falla.

1
const ssl.VERIFY_REQUIRED = 2;

BADCERT_EXPIRED

Resultados de la verificación del certificado, tiempo de espera del certificado

1
const ssl.BADCERT_EXPIRED = 1;

BADCERT_REVOKED

Resultado de la verificación del certificado, el certificado fue revocado

1
const ssl.BADCERT_REVOKED = 2;

BADCERT_CN_MISMATCH

Resultado de la verificación del certificado, nombre de certificado incorrecto

1
const ssl.BADCERT_CN_MISMATCH = 4;

BADCERT_NOT_TRUSTED

Resultado de la verificación del certificado, el certificado no es confiable

1
const ssl.BADCERT_NOT_TRUSTED = 8;