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-рукопожатие, чтобы обеспечить безопасность соединения. Когда возвращаемый Future завершится, RawSecureSocket завершит TLS-рукопожатие. Для использования этой функции другая сторона соединения должна быть готова к TLS-рукопожатию.

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

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

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

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, у 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.19.6/dart-io/RawSecureSocket/secure.html

Spec-Zone.ru

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