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