В основном это означает, что синтаксический анализатор SSL потерян. Уровень сокетов передал ему несколько байтов, которые не соответствуют протоколу SSL.
Когда вы передаете с использованием сокета SSL, он вызывает процедуру форматирования и шифрования для создания зашифрованного пакета. Затем он вызывает уровень простых сокетов для передачи зашифрованного пакета на сервер. Уровень сокетов сервера получает пакет, а затем вызывает пакет SSL для расшифровки пакета. Если пакет не соответствует формату SSL, вы получаете исключение неподдерживаемой версии.
Все байты, поступающие на уровень сокетов, отправляются в пакет SSL. Таким образом, самый простой способ получить эту ошибку — использовать уровень простых сокетов для передачи простого текстового сообщения после установления соединения SSL.
В моем конкретном случае я столкнулся с этим сообщением об ошибке, потому что я передавал лишние байты. Посмотрим, смогу ли я ясно объяснить свою ошибку.
У меня был буфер размером (например) 100 байт. Я упаковал буфер своим 50-байтовым сообщением и вызвал процедуру шифрования SSL. Результирующий пакет имел длину 75 байт. Я вызвал send() для передачи буфера. Это была простая отправка сокетов; он сделал то, что я ему сказал, то есть передал весь 100-байтовый буфер.
На сервере были получены все 100 байт. Пакет SSL попытался расшифровать пакет. Он обнаружил прекрасное SSL-сообщение, упакованное в первые 75 полученных байтов. Все идет нормально. Затем он попытался выяснить, что означают оставшиеся 25 байтов. Он предположил, что это было ВТОРОЕ сообщение SSL, и попытался его расшифровать. Вот когда он задохнулся и выкинул это неприятное исключение.
Я надеюсь, что это дало вам некоторые подсказки о том, что искать в вашем коде.
person
user1965077
schedule
09.01.2013