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:
- 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.
- 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.
- 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
19const 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
1SslSocket ssl.Socket;
Handler
CrearSslHandlerobjeto, verSslHandler
1SslHandler ssl.Handler;
Server
CrearSslServerobjeto, verSslServer
1SslServer ssl.Server;
función estática
connect
CrearSslSocketobjeto y establecer conexión
1
2static 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
4static 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
5static 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
2static 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
1static 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
1static readonly X509Cert ssl.ca;
verification
Entero, configure el modo de verificación del certificado, el valor predeterminado es VERIFY_REQUIRED
1static Integer ssl.verification;
constante
VERIFY_NONE
Modo de verificación de certificado, sin verificación
1const ssl.VERIFY_NONE = 0;
VERIFY_OPTIONAL
Modo de verificación de certificado, verificación opcional, que permite que la verificación falle
1const ssl.VERIFY_OPTIONAL = 1;
VERIFY_REQUIRED
Modo de verificación de certificado, que requiere verificación y se interrumpirá si la verificación falla.
1const ssl.VERIFY_REQUIRED = 2;
BADCERT_EXPIRED
Resultados de la verificación del certificado, tiempo de espera del certificado
1const ssl.BADCERT_EXPIRED = 1;
BADCERT_REVOKED
Resultado de la verificación del certificado, el certificado fue revocado
1const ssl.BADCERT_REVOKED = 2;
BADCERT_CN_MISMATCH
Resultado de la verificación del certificado, nombre de certificado incorrecto
1const ssl.BADCERT_CN_MISMATCH = 4;
BADCERT_NOT_TRUSTED
Resultado de la verificación del certificado, el certificado no es confiable
1const ssl.BADCERT_NOT_TRUSTED = 8;