Базовый модуль модуля

модуль SSL

Модуль ssl — это встроенный модуль шифрования fibjs, который можно использовать для установления протокола передачи гипертекста SSL для сетевого подключения. Этот модуль обеспечивает криптографическую проверку, чтобы клиенты и серверы могли гарантировать безопасность соединения.

Модуль ssl содержит несколько объектов и констант, которые можно использовать для полного процесса связи клиента/сервера SSL. Часто используемые категории:

  1. SslSocket: На основе основногоSocketИнкапсулированный объект сокета SSL можно использовать для выполнения двусторонней аутентификации и других операций связи с удаленным сервером.
  2. SslHandler: процессор преобразования протоколов SSL, используемый для преобразования потоков данных в протоколы потоков SSL, подходящий для создания серверных сервисов.
  3. SslServer: объект SSL-сервера, удобный для создания стандартного многоволоконного SSL-сервера.

Ниже приводитсяssl.ServerВ качестве примера мы представляем использование модуля SSL.

ssl.ServerЭто базовый SSL-сервер, предоставляющий сетевую службу на основе SSL. использоватьssl.ServerКласс может быстро создать сервер на основе SSL/TLS и совместим практически со всеми функциями служб TCP/HTTP. Он имеет следующие характеристики:

  • Он поставляется с менеджером сертификатов X.509, который поддерживает несколько сертификатов доменных имен, подстановочные знаки, сертификаты SAN и другие функции.
  • Он имеет тот же интерфейс и использование, что и TCP-сервер, и коду верхнего уровня не нужно учитывать разницу между SSL-соединением и TCP-соединением.
  • Все протоколы безопасности SSL/TLS реализованы с использованием встроенной библиотеки OpenSSL.
  • Поддерживает функции расширения протокола, такие как SNI и ALPN.

Вот простой пример:

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

В приведенном выше коде мы сначала читаем SSL-сертификат и файлы закрытого ключа, а затем создаем экземпляр SSL-сервера. В функции обратного вызова сервера после получения данных клиента преобразуйте данные в верхний регистр и верните данные клиенту через функцию записи.

объект

Socket

СоздаватьSslSocketобъект, см.SslSocket

1
SslSocket ssl.Socket;

Handler

СоздаватьSslHandlerобъект, см.SslHandler

1
SslHandler ssl.Handler;

Server

СоздаватьSslServerобъект, см.SslServer

1
SslServer ssl.Server;

статическая функция

connect

СоздаватьSslSocketвозразить и установить соединение

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

Параметры звонка:

  • url: строка, указывает протокол подключения, который может быть: ssl://host:port
  • timeout: целое число, указывает время ожидания, единица измерения — миллисекунды, значение по умолчанию — 0.

Результаты возврата:

  • Stream, возвращает успешное соединениеSslSocketобъект

СоздаватьSslSocketвозразить и установить соединение

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

Параметры звонка:

  • url: строка, указывает протокол подключения, который может быть: ssl://host:port
  • crt:X509Cert, сертификат, используемый для отправки на сервер для проверки клиента
  • key:PKey, закрытый ключ, используется для разговора с клиентом
  • timeout: целое число, указывает время ожидания, единица измерения — миллисекунды, значение по умолчанию — 0.

Результаты возврата:

  • Stream, возвращает успешное соединениеSslSocketобъект

СоздаватьSslSocketвозразить и установить соединение

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

Параметры звонка:

  • url: строка, указывает протокол подключения, который может быть: ssl://host:port
  • verification: целое число, режим проверки сертификата
  • crt:X509Cert, сертификат, используемый для отправки на сервер для проверки клиента
  • key:PKey, закрытый ключ, используется для разговора с клиентом
  • timeout: целое число, указывает время ожидания, единица измерения — миллисекунды, значение по умолчанию — 0.

Результаты возврата:

  • Stream, возвращает успешное соединениеSslSocketобъект

setClientCert

Установить сертификат клиента по умолчанию

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

Параметры звонка:

  • crt:X509Cert, сертификат, используемый для отправки на сервер для проверки клиента
  • key:PKey, закрытый ключ, используется для разговора с клиентом

loadRootCerts

Загрузите корневой сертификат по умолчанию, который поставляется с ним, что эквивалентноssl.ca.loadRootCerts

1
static ssl.loadRootCerts();

Содержимое этого сертификата взято из: http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt .

статические свойства

ca

X509Cert, глобальный сертификат, используемый для сертификата сервера проверки режима клиента SSL

1
static readonly X509Cert ssl.ca;

verification

Целое число, установите режим проверки сертификата, по умолчанию VERIFY_REQUIRED.

1
static Integer ssl.verification;

постоянный

VERIFY_NONE

Режим проверки сертификата, без проверки

1
const ssl.VERIFY_NONE = 0;

VERIFY_OPTIONAL

Режим проверки сертификата, дополнительная проверка, допускающая сбой проверки

1
const ssl.VERIFY_OPTIONAL = 1;

VERIFY_REQUIRED

Режим проверки сертификата, который требует проверки и будет прерван в случае сбоя проверки.

1
const ssl.VERIFY_REQUIRED = 2;

BADCERT_EXPIRED

Результаты проверки сертификата, тайм-аут сертификата

1
const ssl.BADCERT_EXPIRED = 1;

BADCERT_REVOKED

Результат проверки сертификата, сертификат отозван

1
const ssl.BADCERT_REVOKED = 2;

BADCERT_CN_MISMATCH

Результат проверки сертификата, неправильное имя сертификата

1
const ssl.BADCERT_CN_MISMATCH = 4;

BADCERT_NOT_TRUSTED

Результат проверки сертификата: сертификат не заслуживает доверия

1
const ssl.BADCERT_NOT_TRUSTED = 8;