Indy "Сброс соединения по одноранговой сети" Err.10054 на конкретном сайте - PullRequest
0 голосов
/ 04 декабря 2018

Я столкнулся с некоторыми проблемами при использовании кода, который работал целую вечность, включая Indy и загрузку веб-страницы.Я использую RAD Studio 10.2 Tokyo.

Веб-страница выглядит следующим образом:

https://donet.rfi.it/RFIPlatform/showDoc.do?compartimentoHidden=AN&docTypeHidden=CC

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

IDHTTP1.Get('https://donet.rfi.it/RFIPlatform/showDoc.do?compartimentoHidden=AN&docTypeHidden=CC');

Я получаю сообщение об ошибке «Сброс подключения по Peer 10054», так как веб-сайт несколько дней назад не работал, а когда он снова появился, код больше не работал.

Вышеупомянутая веб-страница может быть вызвана из браузера, даже может быть загружена с помощью WGET, но Indy терпит неудачу.

Я пытался играть с различными опциями (Cookie Handling, Handle Redirects,HTTPOptions и т.д ...) и я также обновил библиотеки SSL до 1.0.2q (Indy пока не может использовать OpenSSL 1.1.0), но все это просто не хочет работать.

Может кто-то помочьмне понять, что происходит?Это должно быть наверняка что-то на сайте, так как код, который я использую, остается неизменным с 2011 года, и он всегда работал.А до этого тот же код работал в аналогичном приложении с 2008 года.

1 Ответ

0 голосов
/ 04 декабря 2018

Компонент Indy's TIdSSLIOHandlerSocketOpenSSL по умолчанию включает только TLS 1.0.Рассматриваемый веб-сайт (https://donet.rfi.it) больше не принимает TLS 1.0 (возможно, поэтому он перешел в автономный режим для обновления своего программного обеспечения), теперь он принимает только TLS 1.1+.

TIdHTTP можетдля успешного установления соединения TCP / IP с donet.rfi.it:443, но как только TIdSSLIOHandlerSocketOpenSSL отправляет запрос на квитирование TLS 1.0, сервер принудительно закрывает TCP-соединение. Вы получаете ошибку «сброс соединения по одноранговым узлам», в то время как TIdSSLIOHandlerSocketOpenSSLпытается прочитать ответ сервера о квитировании.

Вам необходимо настроить TIdSSLIOHandlerSocketOpenSSL для включения TLS 1.1 и / или 1.2. Это можно сделать с помощью свойства SSLOptions.SSLVersions. Затем TIdHTTP.Get() снова будет работать (Я проверял это).

...