модуль SSL
Модуль ssl — это встроенный модуль шифрования fibjs, который можно использовать для установления протокола передачи гипертекста SSL для сетевого подключения. Этот модуль обеспечивает криптографическую проверку, чтобы клиенты и серверы могли гарантировать безопасность соединения.
Модуль ssl содержит несколько объектов и констант, которые можно использовать для полного процесса связи клиента/сервера SSL. Часто используемые категории:
- SslSocket: На основе основногоSocketИнкапсулированный объект сокета SSL можно использовать для выполнения двусторонней аутентификации и других операций связи с удаленным сервером.
- SslHandler: процессор преобразования протоколов SSL, используемый для преобразования потоков данных в протоколы потоков SSL, подходящий для создания серверных сервисов.
- 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
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();
В приведенном выше коде мы сначала читаем SSL-сертификат и файлы закрытого ключа, а затем создаем экземпляр SSL-сервера. В функции обратного вызова сервера после получения данных клиента преобразуйте данные в верхний регистр и верните данные клиенту через функцию записи.
объект
Socket
СоздаватьSslSocketобъект, см.SslSocket
1SslSocket ssl.Socket;
Handler
СоздаватьSslHandlerобъект, см.SslHandler
1SslHandler ssl.Handler;
Server
СоздаватьSslServerобъект, см.SslServer
1SslServer ssl.Server;
статическая функция
connect
СоздаватьSslSocketвозразить и установить соединение
1
2static Stream ssl.connect(String url,
Integer timeout = 0) async;
Параметры звонка:
- url: строка, указывает протокол подключения, который может быть: ssl://host:port
- timeout: целое число, указывает время ожидания, единица измерения — миллисекунды, значение по умолчанию — 0.
Результаты возврата:
СоздаватьSslSocketвозразить и установить соединение
1
2
3
4static Stream ssl.connect(String url,
X509Cert crt,
PKey key,
Integer timeout = 0) async;
Параметры звонка:
- url: строка, указывает протокол подключения, который может быть: ssl://host:port
- crt:X509Cert, сертификат, используемый для отправки на сервер для проверки клиента
- key:PKey, закрытый ключ, используется для разговора с клиентом
- timeout: целое число, указывает время ожидания, единица измерения — миллисекунды, значение по умолчанию — 0.
Результаты возврата:
СоздаватьSslSocketвозразить и установить соединение
1
2
3
4
5static 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.
Результаты возврата:
setClientCert
Установить сертификат клиента по умолчанию
1
2static ssl.setClientCert(X509Cert crt,
PKey key);
Параметры звонка:
- crt:X509Cert, сертификат, используемый для отправки на сервер для проверки клиента
- key:PKey, закрытый ключ, используется для разговора с клиентом
loadRootCerts
Загрузите корневой сертификат по умолчанию, который поставляется с ним, что эквивалентноssl.ca.loadRootCerts
1static ssl.loadRootCerts();
Содержимое этого сертификата взято из: http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt .
статические свойства
ca
X509Cert, глобальный сертификат, используемый для сертификата сервера проверки режима клиента SSL
1static readonly X509Cert ssl.ca;
verification
Целое число, установите режим проверки сертификата, по умолчанию VERIFY_REQUIRED.
1static Integer ssl.verification;
постоянный
VERIFY_NONE
Режим проверки сертификата, без проверки
1const ssl.VERIFY_NONE = 0;
VERIFY_OPTIONAL
Режим проверки сертификата, дополнительная проверка, допускающая сбой проверки
1const ssl.VERIFY_OPTIONAL = 1;
VERIFY_REQUIRED
Режим проверки сертификата, который требует проверки и будет прерван в случае сбоя проверки.
1const ssl.VERIFY_REQUIRED = 2;
BADCERT_EXPIRED
Результаты проверки сертификата, тайм-аут сертификата
1const ssl.BADCERT_EXPIRED = 1;
BADCERT_REVOKED
Результат проверки сертификата, сертификат отозван
1const ssl.BADCERT_REVOKED = 2;
BADCERT_CN_MISMATCH
Результат проверки сертификата, неправильное имя сертификата
1const ssl.BADCERT_CN_MISMATCH = 4;
BADCERT_NOT_TRUSTED
Результат проверки сертификата: сертификат не заслуживает доверия
1const ssl.BADCERT_NOT_TRUSTED = 8;