Spec-Zone.ru › Dart 2

dart:io

Метод secure

Future<RawSecureSocket> secure(
  1. RawSocket socket,
  2. {StreamSubscription<RawSocketEvent>? subscription,
  3. dynamic host,
  4. SecurityContext? context,
  5. bool onBadCertificate(
    1. X509Certificate certificate
    )?,
  6. void keyLog(
    1. String line
    )?,
  7. List<String>? supportedProtocols}
)

Инициализирует TLS по уже существующему соединению.

Принимает уже подключённый socket и запускает TLS-рукопожатие со стороны клиента, чтобы обеспечить безопасность связи. Когда возвращённое будущее завершается, RawSecureSocket завершает TLS-рукопожатие. Для использования этой функции необходимо, чтобы другой конец соединения был готов к TLS-рукопожатию.

Если у socket уже есть подписка, передайте существующую подписку в параметр subscription. Операция secure возьмёт на себя управление подпиской, заменив обработчики собственными безопасными обработками. Вызывающий код больше не должен взаимодействовать с этой подпиской. Передача приостановленной подписки является ошибкой.

Если передан аргумент host, он будет использован как имя хоста для TLS-рукопожатия. Если host не передан, имя хоста из socket будет использовано. host может быть строкой String или адресом InternetAddress.

onBadCertificate — это необязательный обработчик для недостоверных сертификатов. Обработчик получает X509Certificate и может проверить его и решить (или позволить пользователю решить), принять соединение или нет. Обработчик должен вернуть true, чтобы продолжить соединение SecureSocket.

keyLog — это необязательный обратный вызов, который будет вызван при обмене новыми TLS-ключами с сервером. keyLog будет получать по одной строке текста в формате NSS Key Log Format для каждого вызова. Запись этих строк в файл позволит инструментам (таким как Wireshark) расшифровать содержимое, отправленное через этот сокет. Это предназначено для отладки безопасных сокетов на уровне сети и не должно использоваться в рабочем коде. Например:

final log = File('keylog.txt');
final socket = await SecureSocket.connect('www.example.com', 443,
    keyLog: (line) => log.writeAsStringSync(line, mode: FileMode.append));

supportedProtocols — это необязательный список протоколов (в порядке убывания предпочтения) для использования во время переговоров по протоколу ALPN с сервером. Примерами значений являются "http/1.1" или "h2". Выбранный протокол можно получить через SecureSocket.selectedProtocol.

Вызов этой функции не вызовет поиск DNS-хоста. Если переданный host — это строка String, InternetAddress для результирующего SecureSocket будет иметь переданное значение host в качестве значения хоста, а адрес подключенного сокета — в качестве значения адреса.

См. connect для получения дополнительной информации об аргументах.

Реализация

static Future<RawSecureSocket> secure(RawSocket socket,
    {StreamSubscription<RawSocketEvent>? subscription,
    host,
    SecurityContext? context,
    bool onBadCertificate(X509Certificate certificate)?,
    void keyLog(String line)?,
    List<String>? supportedProtocols}) {
  socket.readEventsEnabled = false;
  socket.writeEventsEnabled = false;
  return _RawSecureSocket.connect(
      host != null ? host : socket.address.host, socket.port, false, socket,
      subscription: subscription,
      context: context,
      onBadCertificate: onBadCertificate,
      keyLog: keyLog,
      supportedProtocols: supportedProtocols);
}

© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-io/RawSecureSocket/secure.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API