secure, статический метод
- RawSocket socket,
- {StreamSubscription<
RawSocketEvent>? subscription, - dynamic host,
- SecurityContext? context,
-
bool onBadCertificate(
- X509Certificate certificate
- void keyLog(
- String line
-
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