Module basismodule

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:

  1. SslSocket: Gebaseerd op de onderliggende waardeSocketHet ingekapselde SSL-socketobject kan worden gebruikt om tweerichtingsauthenticatie en andere communicatiebewerkingen met de externe server uit te voeren.
  2. SslHandler: SSL-protocolconversieprocessor, gebruikt om datastromen om te zetten in SSL-streamprotocollen, geschikt voor het bouwen van server-side services.
  3. 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 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();

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

1
SslSocket ssl.Socket;

Handler

CreërenSslHandlervoorwerp, zieSslHandler

1
SslHandler ssl.Handler;

Server

CreërenSslServervoorwerp, zieSslServer

1
SslServer ssl.Server;

statische functie

connect

CreërenSslSocketbezwaar maken en verbinding maken

1 2
static 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 4
static 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 5
static 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 2
static 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

1
static 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

1
static readonly X509Cert ssl.ca;

verification

Integer, stel de certificaatverificatiemodus in, de standaardwaarde is VERIFY_REQUIRED

1
static Integer ssl.verification;

constante

VERIFY_NONE

Certificaatverificatiemodus, geen verificatie

1
const ssl.VERIFY_NONE = 0;

VERIFY_OPTIONAL

Certificaatverificatiemodus, optionele verificatie, waardoor verificatie mislukt

1
const ssl.VERIFY_OPTIONAL = 1;

VERIFY_REQUIRED

Certificaatverificatiemodus, die verificatie vereist en wordt onderbroken als de verificatie mislukt.

1
const ssl.VERIFY_REQUIRED = 2;

BADCERT_EXPIRED

Certificaatverificatieresultaten, certificaattime-out

1
const ssl.BADCERT_EXPIRED = 1;

BADCERT_REVOKED

Certificaatverificatieresultaat, certificaat is ingetrokken

1
const ssl.BADCERT_REVOKED = 2;

BADCERT_CN_MISMATCH

Certificaatverificatieresultaat, verkeerde certificaatnaam

1
const ssl.BADCERT_CN_MISMATCH = 4;

BADCERT_NOT_TRUSTED

Certificaatverificatieresultaat, het certificaat is niet betrouwbaar

1
const ssl.BADCERT_NOT_TRUSTED = 8;