Module de base

module SSL

Le module SSL est un module de cryptage intégré de fibjs, qui peut être utilisé pour établir le protocole de transfert hypertexte SSL d'une connexion réseau. Ce module fournit une vérification cryptographique afin que les clients et les serveurs puissent garantir que la connexion est sécurisée

Le module SSL contient plusieurs objets et constantes qui peuvent être utilisés pour un processus complet de communication client/serveur SSL. Les catégories couramment utilisées sont :

  1. SslSocket: Basé sur le sous-jacentSocketL'objet socket SSL encapsulé peut être utilisé pour effectuer une authentification bidirectionnelle et d'autres opérations de communication avec le serveur distant.
  2. SslHandler: Processeur de conversion de protocole SSL, utilisé pour convertir les flux de données en protocoles de flux SSL, adapté à la création de services côté serveur.
  3. SslServer: Objet serveur SSL, pratique pour créer un serveur SSL multifibre standard.

Ce qui suit estssl.ServerA titre d'exemple, nous introduisons l'utilisation du module SSL.

ssl.ServerIl s'agit d'un serveur SSL de base qui fournit un service réseau basé sur SSL. utiliserssl.ServerLa classe peut créer rapidement un serveur basé sur SSL/TLS et est compatible avec pratiquement toutes les fonctionnalités des services TCP/HTTP. Il présente les caractéristiques suivantes :

  • Il est livré avec un gestionnaire de certificats X.509 qui prend en charge plusieurs certificats de nom de domaine, caractères génériques, certificats SAN et autres fonctions.
  • Il a la même interface et la même utilisation que le serveur TCP, et le code de la couche supérieure n'a pas besoin de se soucier de la différence entre la connexion SSL et la connexion TCP.
  • Tous les protocoles de sécurité SSL/TLS sont implémentés à l'aide de la bibliothèque OpenSSL intégrée.
  • Prend en charge les fonctions d'extension de protocole telles que SNI et ALPN.

Voici un exemple simple :

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();

Dans le code ci-dessus, nous lisons d'abord le certificat SSL et les fichiers de clé privée, puis créons une instance de serveur SSL. Dans la fonction de rappel du serveur, après avoir reçu les données client, convertissez les données en majuscules et renvoyez les données au client via la fonction d'écriture.

objet

Socket

CréerSslSocketobjet, voirSslSocket

1
SslSocket ssl.Socket;

Handler

CréerSslHandlerobjet, voirSslHandler

1
SslHandler ssl.Handler;

Server

CréerSslServerobjet, voirSslServer

1
SslServer ssl.Server;

fonction statique

connect

CréerSslSocketobjet et établir la connexion

1 2
static Stream ssl.connect(String url, Integer timeout = 0) async;

Paramètres d'appel :

  • url: String, spécifie le protocole de connexion, qui peut être : ssl://host:port
  • timeout: Entier, spécifie le délai d'expiration, l'unité est en millisecondes, la valeur par défaut est 0

Résultats de retour :


CréerSslSocketobjet et établir la connexion

1 2 3 4
static Stream ssl.connect(String url, X509Cert crt, PKey key, Integer timeout = 0) async;

Paramètres d'appel :

  • url: String, spécifie le protocole de connexion, qui peut être : ssl://host:port
  • crt:X509Cert, certificat, utilisé pour envoyer au serveur pour vérifier le client
  • key:PKey, clé privée, utilisée pour parler au client
  • timeout: Entier, spécifie le délai d'expiration, l'unité est en millisecondes, la valeur par défaut est 0

Résultats de retour :


CréerSslSocketobjet et établir la connexion

1 2 3 4 5
static Stream ssl.connect(String url, Integer verification, X509Cert crt, PKey key, Integer timeout = 0) async;

Paramètres d'appel :

  • url: String, spécifie le protocole de connexion, qui peut être : ssl://host:port
  • verification: Entier, mode de vérification du certificat
  • crt:X509Cert, certificat, utilisé pour envoyer au serveur pour vérifier le client
  • key:PKey, clé privée, utilisée pour parler au client
  • timeout: Entier, spécifie le délai d'expiration, l'unité est en millisecondes, la valeur par défaut est 0

Résultats de retour :


setClientCert

Définir le certificat client par défaut

1 2
static ssl.setClientCert(X509Cert crt, PKey key);

Paramètres d'appel :

  • crt:X509Cert, certificat, utilisé pour envoyer au serveur pour vérifier le client
  • key:PKey, clé privée, utilisée pour parler au client

loadRootCerts

Chargez le certificat racine par défaut qui l'accompagne, ce qui équivaut àssl.ca.loadRootCerts

1
static ssl.loadRootCerts();

Le contenu de ce certificat provient de : http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt

propriétés statiques

ca

X509Cert, certificat global, utilisé pour le certificat du serveur de vérification du mode client SSL

1
static readonly X509Cert ssl.ca;

verification

Nombre entier, définissez le mode de vérification du certificat, la valeur par défaut est VERIFY_REQUIRED

1
static Integer ssl.verification;

constante

VERIFY_NONE

Mode de vérification du certificat, aucune vérification

1
const ssl.VERIFY_NONE = 0;

VERIFY_OPTIONAL

Mode de vérification du certificat, vérification facultative, permettant l'échec de la vérification

1
const ssl.VERIFY_OPTIONAL = 1;

VERIFY_REQUIRED

Mode de vérification du certificat, qui nécessite une vérification et sera interrompu si la vérification échoue.

1
const ssl.VERIFY_REQUIRED = 2;

BADCERT_EXPIRED

Résultats de la vérification du certificat, délai d'expiration du certificat

1
const ssl.BADCERT_EXPIRED = 1;

BADCERT_REVOKED

Résultat de la vérification du certificat, le certificat a été révoqué

1
const ssl.BADCERT_REVOKED = 2;

BADCERT_CN_MISMATCH

Résultat de la vérification du certificat, nom de certificat incorrect

1
const ssl.BADCERT_CN_MISMATCH = 4;

BADCERT_NOT_TRUSTED

Résultat de la vérification du certificat, le certificat n'est pas digne de confiance

1
const ssl.BADCERT_NOT_TRUSTED = 8;