idhttp: ошибка SSLv3_READ_BYTES на определенных сайтах - PullRequest
0 голосов
/ 05 октября 2018

Я использую TIdHTTP для удобного получения запросов.В основном это работает хорошо, но на некоторых сайтах я не могу установить соединение, даже если я пробую различные настройки.Я пытался следовать ответу от здесь

Чтобы действительно подключиться к «любому» серверу, вам нужно будет обнаружить ошибку «неправильной версии» и повторить попытку с другим конкретным методом /Конфигурация SSLVersions.К сожалению, ответ «неправильная версия» не включает в себя фактическую версию сервера, поэтому вы должны использовать метод проб и ошибок.Если SSLv23 не работает, попробуйте TLSv1_2.Если это не помогло, попробуйте TLSv1_1.Если это не помогло, попробуйте TLSv1.Если это не удается, попробуйте SSLv3.

Но это не помогло.

Исключение - 'Ошибка соединения с SSL.error: 14094410: Подпрограммы SSL: SSL3_READ_BYTES: сбой квитирования оповещения sslv3'

Или непонятные подпрограммы SSL: SSL3_GET_RECORD: неверный номер версии.Но я не могу точно решить SSL3_READ_BYTES: sslv3 alert

Пример кода, воспроизводящего проблему, и примеры сайтов:

begin
  httpSender := TIdHTTP.Create(nil);
   SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  SSL.SSLOptions.Method := sslvTLSv1; //or  sslvSSLv3, sslvTLSv1,sslvTLSv1_1

  //or
  //SSL.SSLOptions.Method := sslvSSLv23;
  //SSL.SSLOptions.SSLVersions :=  [sslvSSLv2, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];

  httpSender.IOHandler := SSL;
  //exceptions here
  httpSender.Get('https://www.linux.org/');
  //httpSender.Get('https://st.deviantart.net/');
  //httpSender.Get('https://c.tcdn.co/fa4/aa2/fa4aa23e-f55b-11e6-ba87-040157cdaf01/channel256.png');
end;

Так как мне настроить TIdHTTP для подключения к этим сайтам?

Я использую Delphi XE8 и openssl 1.0.1e

1 Ответ

0 голосов
/ 05 октября 2018

Ни одному из сайтов в вашем вопросе не нужна более низкая версия протокола TLS.Все они прекрасно способны общаться с TLS 1.2, а иногда даже с TLS 1.3.Но все эти сайты работают только в том случае, если клиент использует расширение SNI TLS для объявления целевого имени хоста в рамках рукопожатия TLS.

Таким образом, более вероятно, что проблема на самом деле в отсутствии расширения SNI.Кажется, это известная проблема.См. TIdHTTP и TLS SNI не работает для получения дополнительной информации и способов решения этой проблемы.

...