Indy "Сброс соединения по одноранговой сети" Err. 10054 на конкретном сайте
Я сталкиваюсь с некоторыми проблемами при использовании кода, который работал целую вечность, включая Indy и загрузку веб-страницы. Я использую RAD Studio 10.2 Токио.
Веб-страница выглядит следующим образом:
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 ответ
Инди 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()
будет работать снова (я проверял это).