Нет ответа на запись, если сервер использует SslHandler, а клиент - нет - PullRequest
0 голосов
/ 19 января 2012

Я, кажется, получаю то же самое поведение для обратного, если клиент использует SslHandler, а сервер - нет. afacit, я вызываю рукопожатие () на одной стороне канала, и тогда ничего не происходит. Я предполагаю, что сторона с SSL ожидает ответа на рукопожатие, поэтому запрос на запись не обрабатывается, и все застряли в ожидании всех остальных.

В идеале я хотел бы получить какую-то ошибку или закрыть канал, что-то, чтобы показать, что есть несоответствие, чтобы я мог выдать соответствующую ошибку клиенту, чтобы он мог включить или отключить SSL соответствующим образом.

Кто-нибудь имеет какое-либо представление о том, что происходит, или предложение о том, как с этим справиться?

Редактировать: После дальнейших исследований, похоже, что в методе декодирования SslHandler кодируемая полезная нагрузка без SSL выглядит просто как SSLv2, она идет с majorVersion = 8. Таким образом, SslHandler не противится ответу, так как он выглядит как действительный ответ, но это не так. Рукопожатие выглядит недействительным, статус все еще NEEDS_UNWRAP, и затем одна сторона ожидает своего первоначального запроса, а другая ожидает ответа на рукопожатие, которое она может понять. Если в блоке, обнаруживающем SSLv2, я устанавливаю основную версию 2 или 3, я получаю исключение SSL, утверждающее, что это не запись SSL / TLS, что является истинным. Я не знаю, правильное ли это решение или просто что-то, что случайно приводит меня к правильному поведению.

Я должен отметить, что это, кажется, разрешает только тот случай, когда SslHandler активен на Сервере, а не на клиенте. Когда все наоборот, кажется, что он все еще зависает с декодированием, которое никогда не вызывается в SslHandler.

...