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:
- 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.
- 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.
- 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
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();
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
1SslSocket ssl.Socket;
Handler
CrearSslHandlerobxecto, verSslHandler
1SslHandler ssl.Handler;
Server
CrearSslServerobxecto, verSslServer
1SslServer ssl.Server;
función estática
connect
CrearSslSocketobxectar e establecer conexión
1
2static 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
4static 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
5static 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
2static 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
1static 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
1static readonly X509Cert ssl.ca;
verification
Enteiro, establece o modo de verificación do certificado, o valor predeterminado é VERIFY_REQUIRED
1static Integer ssl.verification;
constante
VERIFY_NONE
Modo de verificación do certificado, sen verificación
1const ssl.VERIFY_NONE = 0;
VERIFY_OPTIONAL
Modo de verificación do certificado, verificación opcional, que permite fallar a verificación
1const 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.
1const ssl.VERIFY_REQUIRED = 2;
BADCERT_EXPIRED
Resultados da verificación do certificado, tempo de espera do certificado
1const ssl.BADCERT_EXPIRED = 1;
BADCERT_REVOKED
Resultado da verificación do certificado, o certificado foi revogado
1const ssl.BADCERT_REVOKED = 2;
BADCERT_CN_MISMATCH
Resultado da verificación do certificado, nome do certificado incorrecto
1const ssl.BADCERT_CN_MISMATCH = 4;
BADCERT_NOT_TRUSTED
Resultado da verificación do certificado, o certificado non é de confianza
1const ssl.BADCERT_NOT_TRUSTED = 8;