module ssl
De SSL-module is een ingebouwde encryptiemodule van fibjs, die kan worden gebruikt om het SSL-hypertekstoverdrachtsprotocol van een netwerkverbinding tot stand te brengen. Deze module biedt cryptografische verificatie zodat clients en servers ervoor kunnen zorgen dat de verbinding veilig is
De SSL-module bevat meerdere objecten en constanten die kunnen worden gebruikt voor een compleet SSL-client/server-communicatieproces. Veelgebruikte categorieën zijn:
- SslSocket: Gebaseerd op de onderliggende waardeSocketHet ingekapselde SSL-socketobject kan worden gebruikt om tweerichtingsauthenticatie en andere communicatiebewerkingen met de externe server uit te voeren.
- SslHandler: SSL-protocolconversieprocessor, gebruikt om datastromen om te zetten in SSL-streamprotocollen, geschikt voor het bouwen van server-side services.
- SslServer: SSL-serverobject, handig voor het bouwen van een standaard multi-fiber SSL-server.
Het volgende isssl.ServerAls voorbeeld introduceren we het gebruik van een SSL-module.
ssl.ServerHet is een standaard SSL-server die een op SSL gebaseerde netwerkservice biedt. gebruikssl.ServerDe klasse kan snel een server maken op basis van SSL/TLS en is compatibel met vrijwel alle functies van TCP/HTTP-services. Het heeft de volgende kenmerken:
- Het wordt geleverd met een X.509-certificaatbeheerder die meerdere domeinnaamcertificaten, wildcards, SAN-certificaten en andere functies ondersteunt.
- Het heeft dezelfde interface en hetzelfde gebruik als de TCP-server, en de code van de bovenste laag hoeft zich geen zorgen te maken over het verschil tussen SSL-verbinding en TCP-verbinding.
- Alle SSL/TLS-beveiligingsprotocollen worden geïmplementeerd met behulp van de ingebouwde OpenSSL-bibliotheek.
- Ondersteunt protocoluitbreidingsfuncties zoals SNI en ALPN.
Hier is een eenvoudig voorbeeld:
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();
In de bovenstaande code hebben we eerst het SSL-certificaat en de privésleutelbestanden gelezen en vervolgens een SSL-serverinstantie gemaakt. In de callback-functie van de server converteert u, na ontvangst van de clientgegevens, de gegevens naar hoofdletters en stuurt u de gegevens terug naar de client via de schrijffunctie.
voorwerp
Socket
CreërenSslSocketvoorwerp, zieSslSocket
1SslSocket ssl.Socket;
Handler
CreërenSslHandlervoorwerp, zieSslHandler
1SslHandler ssl.Handler;
Server
CreërenSslServervoorwerp, zieSslServer
1SslServer ssl.Server;
statische functie
connect
CreërenSslSocketbezwaar maken en verbinding maken
1
2static Stream ssl.connect(String url,
Integer timeout = 0) async;
Oproepparameters:
- url: String, specificeert het verbindingsprotocol, dat kan zijn: ssl://host:port
- timeout: Geheel getal, specificeert de time-out, de eenheid is milliseconden, de standaardwaarde is 0
Resultaten retourneren:
CreërenSslSocketbezwaar maken en verbinding maken
1
2
3
4static Stream ssl.connect(String url,
X509Cert crt,
PKey key,
Integer timeout = 0) async;
Oproepparameters:
- url: String, specificeert het verbindingsprotocol, dat kan zijn: ssl://host:port
- crt:X509Cert, certificaat, gebruikt om naar de server te verzenden om de client te verifiëren
- key:PKey, privésleutel, gebruikt om met de klant te praten
- timeout: Geheel getal, specificeert de time-out, de eenheid is milliseconden, de standaardwaarde is 0
Resultaten retourneren:
CreërenSslSocketbezwaar maken en verbinding maken
1
2
3
4
5static Stream ssl.connect(String url,
Integer verification,
X509Cert crt,
PKey key,
Integer timeout = 0) async;
Oproepparameters:
- url: String, specificeert het verbindingsprotocol, dat kan zijn: ssl://host:port
- verification: geheel getal, certificaatverificatiemodus
- crt:X509Cert, certificaat, gebruikt om naar de server te verzenden om de client te verifiëren
- key:PKey, privésleutel, gebruikt om met de klant te praten
- timeout: Geheel getal, specificeert de time-out, de eenheid is milliseconden, de standaardwaarde is 0
Resultaten retourneren:
setClientCert
Stel het standaardclientcertificaat in
1
2static ssl.setClientCert(X509Cert crt,
PKey key);
Oproepparameters:
- crt:X509Cert, certificaat, gebruikt om naar de server te verzenden om de client te verifiëren
- key:PKey, privésleutel, gebruikt om met de klant te praten
loadRootCerts
Laad het standaard rootcertificaat dat daarbij hoort, wat gelijk is aanssl.ca.loadRootCerts
1static ssl.loadRootCerts();
De inhoud van dit certificaat is afkomstig van: http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
statische eigenschappen
ca
X509Cert, globaal certificaat, gebruikt voor servercertificaat voor verificatie van de SSL-clientmodus
1static readonly X509Cert ssl.ca;
verification
Integer, stel de certificaatverificatiemodus in, de standaardwaarde is VERIFY_REQUIRED
1static Integer ssl.verification;
constante
VERIFY_NONE
Certificaatverificatiemodus, geen verificatie
1const ssl.VERIFY_NONE = 0;
VERIFY_OPTIONAL
Certificaatverificatiemodus, optionele verificatie, waardoor verificatie mislukt
1const ssl.VERIFY_OPTIONAL = 1;
VERIFY_REQUIRED
Certificaatverificatiemodus, die verificatie vereist en wordt onderbroken als de verificatie mislukt.
1const ssl.VERIFY_REQUIRED = 2;
BADCERT_EXPIRED
Certificaatverificatieresultaten, certificaattime-out
1const ssl.BADCERT_EXPIRED = 1;
BADCERT_REVOKED
Certificaatverificatieresultaat, certificaat is ingetrokken
1const ssl.BADCERT_REVOKED = 2;
BADCERT_CN_MISMATCH
Certificaatverificatieresultaat, verkeerde certificaatnaam
1const ssl.BADCERT_CN_MISMATCH = 4;
BADCERT_NOT_TRUSTED
Certificaatverificatieresultaat, het certificaat is niet betrouwbaar
1const ssl.BADCERT_NOT_TRUSTED = 8;