Я пытаюсь подключиться к серверу .Net (4.5.2). Это TCP-соединение, открытое устройством, которое использует TLS 1.2.Подключение клиента к TCP-серверу с использованием TLS 1.2
- На стороне сервера, у меня есть стандартный .Net реализация TCP сервер:
SslStream
обернутых через DotNetty - Я не могу изменить что-либо на устройстве
Любой клиент .Net может успешно подключиться на мой сервер, используя защищенное соединение TLS. Он работает при попытке с CURL, поэтому я завершил работу своего TCP-сервера.
Итак, я сравнил (используя Wireshark) то, что было отправлено рабочим клиентом из того, что было отправлено устройством, которое не может подключиться. Значительная разница, которую я обнаружил, - это отсутствие (для устройства) Server Name Extension (SNI) внутри сообщения клиента Hello TLS.
Следующее, что я пробовал, - это вручную отправить данные на мой сервер с помощью Pcap.Net, т.е. вручную отправлять сообщения TCP SYN/TCP ACK/Client Hello с использованием необработанных байтовых массивов (необработанные данные, которые я получил (благодаря Wireshark) с устройства, пытающегося для подключения к моему серверу). Я подтвердил, что настройка неработающего массива байтов Hello Hello, добавив расширение Server Name, заставляет мое рукопожатие TLS работать.
Очевидно, что у меня возникла проблема с клиентами, которые не включают расширение SNI и сервер, который отказывается от рукопожатия, если эта информация отсутствует.
Как я могу изменить способ ведения своего TCP-сервера для приема клиента, который не предоставляет расширение имени сервера? Возможно ли, в первую очередь, использовать стандарт .Net SslStream
класс?
AFAIK, расширение SNI не является обязательным, и это зависит от клиента, чтобы решить, использовать его или нет, поэтому сервер должен теоретически принять сообщение клиента Hello без него.
Любой указатель был бы весьма благодарен.
Боюсь, .NET не имеет никакого контроля над этим - 'SslStream' просто управляемая оболочка для SChannel и не всегда встретиться. Вы пытались возиться с обратным вызовом проверки сертификата? Приветствует ли вас клиент Hello? Можете ли вы сократить его, чтобы заставить его работать? – Luaan
в качестве стороннего клиента может установить * любые * TLS1.2 соединения? например через браузер на данный https-сайт? – wal
, если вы абсолютно должны получить эту работу, вы можете рассмотреть другую реализацию SSLStream, например, такой продукт, как https://www.eldos.com/sbb/desc-ssl-spec.php (я не одобряю только первую альтернативу i found) – wal