Módulo módulo básico

módulo ssl

O módulo ssl é un módulo de cifrado integrado de fibjs, que se pode usar para establecer o protocolo de transferencia de hipertexto SSL dunha conexión de rede. Este módulo proporciona verificación criptográfica para que os clientes e servidores poidan garantir que a conexión é segura

O módulo ssl contén varios obxectos e constantes que se poden usar para un proceso completo de comunicación cliente/servidor SSL. As categorías máis usadas son:

  1. SslSocket: Baseado no subxacenteSocketO obxecto de socket SSL encapsulado pódese usar para realizar a autenticación bidireccional e outras operacións de comunicación co servidor remoto.
  2. SslHandler: Procesador de conversión de protocolo SSL, usado para converter fluxos de datos en protocolos de fluxos SSL, axeitado para crear servizos no servidor.
  3. SslServer: obxecto de servidor SSL, conveniente para construír un servidor SSL multi-fibra estándar.

O seguinte éssl.ServerComo exemplo, introducimos o uso do módulo ssl.

ssl.ServerÉ un servidor SSL básico que ofrece un servizo de rede baseado en SSL. usarssl.ServerA clase pode crear rapidamente un servidor baseado en SSL/TLS e é compatible basicamente con todas as funcións dos servizos TCP/HTTP. Ten as seguintes características:

  • Vén cun xestor de certificados X.509 que admite varios certificados de nomes de dominio, comodíns, certificados SAN e outras funcións.
  • Ten a mesma interface e uso que o servidor TCP, e o código da capa superior non ten que preocuparse pola diferenza entre a conexión SSL e a conexión TCP.
  • Todos os protocolos de seguridade SSL/TLS impléntanse mediante a biblioteca integrada de OpenSSL.
  • Admite funcións de extensión de protocolo como SNI e ALPN.

Aquí tes un exemplo sinxelo:

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();

No código anterior, primeiro lemos o certificado SSL e os ficheiros de clave privada e despois creamos unha instancia de servidor SSL. Na función de devolución de chamada do servidor, despois de recibir os datos do cliente, converte os datos en maiúsculas e devólveos ao cliente mediante a función de escritura.

obxecto

Socket

CrearSslSocketobxecto, verSslSocket

1
SslSocket ssl.Socket;

Handler

CrearSslHandlerobxecto, verSslHandler

1
SslHandler ssl.Handler;

Server

CrearSslServerobxecto, verSslServer

1
SslServer ssl.Server;

función estática

connect

CrearSslSocketobxectar e establecer conexión

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

Parámetros de chamada:

  • url: String, especifica o protocolo de conexión, que pode ser: ssl://host:port
  • timeout: Número enteiro, especifica o tempo de espera, a unidade é milisegundos, o valor predeterminado é 0

Resultados de devolución:


CrearSslSocketobxectar e establecer conexión

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

Parámetros de chamada:

  • url: String, especifica o protocolo de conexión, que pode ser: ssl://host:port
  • crt:X509Cert, certificado, usado para enviar ao servidor para verificar o cliente
  • key:PKey, clave privada, usada para falar co cliente
  • timeout: Número enteiro, especifica o tempo de espera, a unidade é milisegundos, o valor predeterminado é 0

Resultados de devolución:


CrearSslSocketobxectar e 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 chamada:

  • url: String, especifica o protocolo de conexión, que pode ser: ssl://host:port
  • verification: Número enteiro, modo de verificación do certificado
  • crt:X509Cert, certificado, usado para enviar ao servidor para verificar o cliente
  • key:PKey, clave privada, usada para falar co cliente
  • timeout: Número enteiro, especifica o tempo de espera, a unidade é milisegundos, o valor predeterminado é 0

Resultados de devolución:


setClientCert

Establecer o certificado de cliente predeterminado

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

Parámetros de chamada:

  • crt:X509Cert, certificado, usado para enviar ao servidor para verificar o cliente
  • key:PKey, clave privada, usada para falar co cliente

loadRootCerts

Cargue o certificado raíz predeterminado que vén con el, que é o equivalente assl.ca.loadRootCerts

1
static ssl.loadRootCerts();

O contido deste certificado procede 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, usado para o certificado do servidor de verificación do modo cliente ssl

1
static readonly X509Cert ssl.ca;

verification

Enteiro, establece o modo de verificación do certificado, o valor predeterminado é VERIFY_REQUIRED

1
static Integer ssl.verification;

constante

VERIFY_NONE

Modo de verificación do certificado, sen verificación

1
const ssl.VERIFY_NONE = 0;

VERIFY_OPTIONAL

Modo de verificación do certificado, verificación opcional, que permite fallar a verificación

1
const ssl.VERIFY_OPTIONAL = 1;

VERIFY_REQUIRED

Modo de verificación do certificado, que require unha verificación e que se interromperá se a verificación falla.

1
const ssl.VERIFY_REQUIRED = 2;

BADCERT_EXPIRED

Resultados da verificación do certificado, tempo de espera do certificado

1
const ssl.BADCERT_EXPIRED = 1;

BADCERT_REVOKED

Resultado da verificación do certificado, o certificado foi revogado

1
const ssl.BADCERT_REVOKED = 2;

BADCERT_CN_MISMATCH

Resultado da verificación do certificado, nome do certificado incorrecto

1
const ssl.BADCERT_CN_MISMATCH = 4;

BADCERT_NOT_TRUSTED

Resultado da verificación do certificado, o certificado non é de confianza

1
const ssl.BADCERT_NOT_TRUSTED = 8;