2009-04-01 5 views
4

Кажется, что ошибка в реализации SSL для https-сервера, к которому я подключаюсь; проблема изначально возникла в моем приложении, но с тех пор я отлаживал/воспроизводил ее с помощью утилиты командной строки openssl, поэтому я уверен, что она не имеет никакого отношения к моему приложению на данный момент.Обходное решение для ошибки SSL

Если я подключаюсь к удаленному серверу без параметров, отличных от -connect, OpenSSL отправляет SSLv2 CLIENT-HELLO, сервер отвечает сервером TLSv1 ServerHello, и все происходит нормально.

Если я подключаюсь к -ssl3, OpenSSL отправляет SSLv3 ClientHello, сервер отвечает SSLv3 ServerHello, и снова все в порядке.

Однако, если я связываю с -no_ssl2 или -tls1, OpenSSL посылает TLSv1 ClientHello, а сервер отвечает "TLS 1.0 Alert [length 0002], fatal unexpected_message", что оригинальная проблема, которую я видел в моем приложении.

Существует несколько возможных обходных решений, которые предлагают себя на этом этапе, но я идеально ищу что-то общее, а не специальное покрытие этого конкретного сервера, поэтому я надеюсь, что существует какое-то «стандартное» обходное решение для этого.

ответ

2

Похоже, проблема была вызвана продлением мандата RFC 5077; отключение этого (например, путем передачи -no_ticket на openssl), чтобы TLSv1 ClientHello преуспел с удаленным сервером. Поскольку я не нуждаюсь в этом расширении в своем приложении, это обходное решение кажется наиболее подходящим способом.

Небольшое исследование предполагает, что проблема может быть только пустым расширений абонемента, но я не стал пытаться выяснить, были ли у этого конкретного сервера проблемы с непустыми.