modulo ssl
Il modulo SSL è un modulo di crittografia integrato di fibjs, che può essere utilizzato per stabilire il protocollo di trasferimento ipertestuale SSL di una connessione di rete. Questo modulo fornisce la verifica crittografica in modo che client e server possano garantire che la connessione sia sicura
Il modulo SSL contiene più oggetti e costanti che possono essere utilizzati per un processo di comunicazione client/server SSL completo. Le categorie comunemente utilizzate sono:
- SslSocket: In base al sottostanteSocketL'oggetto socket SSL incapsulato può essere utilizzato per eseguire l'autenticazione bidirezionale e altre operazioni di comunicazione con il server remoto.
- SslHandler: processore di conversione del protocollo SSL, utilizzato per convertire i flussi di dati in protocolli di flusso SSL, adatti per creare servizi lato server.
- SslServer: oggetto server SSL, utile per creare server SSL multifibra standard.
Quello che segue èssl.ServerAd esempio, introduciamo l'uso del modulo SSL.
ssl.ServerÈ un server SSL di base che fornisce un servizio di rete basato su SSL. utilizzossl.ServerLa classe può creare rapidamente un server basato su SSL/TLS ed è compatibile praticamente con tutte le funzionalità dei servizi TCP/HTTP. Ha le seguenti caratteristiche:
- Viene fornito con un gestore di certificati X.509 che supporta più certificati di nomi di dominio, caratteri jolly, certificati SAN e altre funzioni.
- Ha la stessa interfaccia e utilizzo del server TCP e il codice di livello superiore non deve preoccuparsi della differenza tra connessione SSL e connessione TCP.
- Tutti i protocolli di sicurezza SSL/TLS sono implementati utilizzando la libreria OpenSSL integrata.
- Supporta funzioni di estensione del protocollo come SNI e ALPN.
Ecco un semplice esempio:
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();
Nel codice precedente, leggiamo prima il certificato SSL e i file della chiave privata, quindi creiamo un'istanza del server SSL. Nella funzione di callback del server, dopo aver ricevuto i dati del client, convertire i dati in maiuscolo e restituirli al client tramite la funzione di scrittura.
oggetto
Socket
CreareSslSocketoggetto, vediSslSocket
1SslSocket ssl.Socket;
Handler
CreareSslHandleroggetto, vediSslHandler
1SslHandler ssl.Handler;
Server
CreareSslServeroggetto, vediSslServer
1SslServer ssl.Server;
funzione statica
connect
CreareSslSocketoggetto e stabilire la connessione
1
2static Stream ssl.connect(String url,
Integer timeout = 0) async;
Parametri di chiamata:
- url: String, specifica il protocollo di connessione, che può essere: ssl://host:port
- timeout: Numero intero, specifica il timeout, l'unità è millisecondi, il valore predefinito è 0
Risultati restituiti:
CreareSslSocketoggetto e stabilire la connessione
1
2
3
4static Stream ssl.connect(String url,
X509Cert crt,
PKey key,
Integer timeout = 0) async;
Parametri di chiamata:
- url: String, specifica il protocollo di connessione, che può essere: ssl://host:port
- crt:X509Cert, certificato, utilizzato per inviare al server per verificare il client
- key:PKey, chiave privata, utilizzata per parlare con il client
- timeout: Numero intero, specifica il timeout, l'unità è millisecondi, il valore predefinito è 0
Risultati restituiti:
CreareSslSocketoggetto e stabilire la connessione
1
2
3
4
5static Stream ssl.connect(String url,
Integer verification,
X509Cert crt,
PKey key,
Integer timeout = 0) async;
Parametri di chiamata:
- url: String, specifica il protocollo di connessione, che può essere: ssl://host:port
- verification: Numero intero, modalità di verifica del certificato
- crt:X509Cert, certificato, utilizzato per inviare al server per verificare il client
- key:PKey, chiave privata, utilizzata per parlare con il client
- timeout: Numero intero, specifica il timeout, l'unità è millisecondi, il valore predefinito è 0
Risultati restituiti:
setClientCert
Imposta il certificato client predefinito
1
2static ssl.setClientCert(X509Cert crt,
PKey key);
Parametri di chiamata:
- crt:X509Cert, certificato, utilizzato per inviare al server per verificare il client
- key:PKey, chiave privata, utilizzata per parlare con il client
loadRootCerts
Carica il certificato root predefinito fornito con esso, che è equivalente assl.ca.loadRootCerts
1static ssl.loadRootCerts();
Il contenuto di questo certificato proviene da: http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
proprietà statiche
ca
X509Cert, certificato globale, utilizzato per il certificato del server di verifica in modalità client SSL
1static readonly X509Cert ssl.ca;
verification
Numero intero, imposta la modalità di verifica del certificato, il valore predefinito è VERIFY_REQUIRED
1static Integer ssl.verification;
costante
VERIFY_NONE
Modalità di verifica del certificato, nessuna verifica
1const ssl.VERIFY_NONE = 0;
VERIFY_OPTIONAL
Modalità di verifica del certificato, verifica facoltativa, che consente alla verifica di fallire
1const ssl.VERIFY_OPTIONAL = 1;
VERIFY_REQUIRED
Modalità di verifica del certificato, che richiede la verifica e verrà interrotta se la verifica fallisce.
1const ssl.VERIFY_REQUIRED = 2;
BADCERT_EXPIRED
Risultati della verifica del certificato, timeout del certificato
1const ssl.BADCERT_EXPIRED = 1;
BADCERT_REVOKED
Risultato della verifica del certificato, il certificato è stato revocato
1const ssl.BADCERT_REVOKED = 2;
BADCERT_CN_MISMATCH
Risultato della verifica del certificato, nome del certificato errato
1const ssl.BADCERT_CN_MISMATCH = 4;
BADCERT_NOT_TRUSTED
Risultato della verifica del certificato, il certificato non è affidabile
1const ssl.BADCERT_NOT_TRUSTED = 8;