Spec-Zone.ru › Dart 2

dart:io

Метод secure

Future<SecureSocket> secure(
  1. Socket socket,
  2. {dynamic host,
  3. SecurityContext? context,
  4. bool onBadCertificate(
    1. X509Certificate certificate
    )?,
  5. void keyLog(
    1. String line
    )?,
  6. @Since("2.6") List<String>? supportedProtocols}
)

Инициализирует TLS для существующего подключения.

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

Если у socket уже есть подписка, эта подписка больше не будет получать события. В большинстве случаев правильным действием является вызов StreamSubscription.pause для этой подписки перед запуском TLS-рукопожатия.

Переданный socket закрыт и больше не может использоваться.

Если передан аргумент 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<SecureSocket> secure(Socket socket,
    {host,
    SecurityContext? context,
    bool onBadCertificate(X509Certificate certificate)?,
    void keyLog(String line)?,
    @Since("2.6") List<String>? supportedProtocols}) {
  return ((socket as dynamic /*_Socket*/)._detachRaw() as Future)
      .then<RawSecureSocket>((detachedRaw) {
    return RawSecureSocket.secure(detachedRaw[0] as RawSocket,
        subscription: detachedRaw[1] as StreamSubscription<RawSocketEvent>?,
        host: host,
        context: context,
        onBadCertificate: onBadCertificate,
        keyLog: keyLog,
        supportedProtocols: supportedProtocols);
  }).then<SecureSocket>((raw) => new SecureSocket._(raw));
}

© 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/SecureSocket/secure.html

Spec-Zone.ru

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