Включить TLS на открытом сокете (STARTTLS)

Похоже, поддержка SSL/TLS недавно была добавлена в Dart. через класс SecureSocket, и это здорово.

Так, например, это

SecureSocket.connect(_host, _port).then(
        (Socket socket) {
          ...

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

Вот как это можно сделать в PHP:

$socket = fsockopen($server, $port, $errno, $errstr);
// ... do some unencrypted stuff...
stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);

Есть ли способ сделать это в Дарте?

РЕДАКТИРОВАТЬ: я думаю, что я ищу реализацию Dart STARTTLS.


person Max♦    schedule 14.07.2013    source источник


Ответы (1)


Я сам не пробовал, но похоже на метод secure в SecureSocket документация — это именно то, что вам нужно (при условии, что вы хотите использовать рукопожатие на стороне клиента, в противном случае см. secureServer):

Future<SecureSocket> secure(Socket socket, {host, 
       bool sendClientCertificate: false, String certificateName, bool
       onBadCertificate(X509Certificate certificate)})

Берет уже подключенный сокет и запускает рукопожатие TLS на стороне клиента, чтобы обеспечить безопасность связи.

person Bruno    schedule 14.07.2013
comment
Работает. Не могу поверить, что я не видел этого в документе. Спасибо! - person Max♦; 15.07.2013