Проблемы с SSL-соединением при использовании CDN (Content Delivery Network), таких как Cloudflare, являются распространённой проблемой среди разработчиков, использующих Indy в Delphi. В данной статье мы разберём конкретную проблему, с которой столкнулся пользователь GabrielMoraru, и предложим несколько решений для корректной работы SSL-соединения через Cloudflare.
Описание проблемы
Пользователь столкнулся со следующими ошибками при попытке установить SSL-соединение через Cloudflare:
Exception class EIdOSSLUnderlyingCryptoError with message '
Error connecting with SSL. error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error'
При изменении версий SSL на [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2] появляется другая ошибка:
Интересно, что без активации CDN соединение работает корректно.
Анализ проблемы
Основные факторы, влияющие на проблему:
Версия OpenSSL: используется openssl-1.0.2u-i386-win32.zip, которая уже устарела
Версия Indy: 10.6.2 (поставляемая с Delphi 11.3)
Настройки SSL: указаны конкретные версии TLS и набор шифров
User-Agent: Cloudflare может блокировать запросы с нестандартными User-Agent
Решения проблемы
1. Обновление OpenSSL
Первым шагом рекомендуется обновить библиотеки OpenSSL до более новых версий (1.1.1 или 3.x). Устаревшие версии могут не поддерживать современные требования безопасности Cloudflare.
// Убедитесь, что используете актуальные DLL-библиотеки
IdOpenSSLSetLibPath(AppData.SysDir); // путь к libcrypto-1_1.dll и libssl-1_1.dll
Проверка сертификатов: в рабочей версии кода не следует отключать проверку сертификатов (VerifyMode := [])
Обновление Indy: рассмотрите возможность обновления Indy до последней версии с GitHub
Анализ трафика: используйте инструменты вроде Wireshark для анализа SSL-рукопожатия
Проверка Cloudflare Settings: убедитесь, что в настройках Cloudflare не включены слишком строгие ограничения
Заключение
Проблемы с SSL-соединением через Cloudflare в Delphi могут быть решены несколькими способами: обновлением OpenSSL, правильной настройкой TIdSSLIOHandlerSocketOpenSSL, установкой корректного User-Agent или переходом на TNetHTTPClient. Каждое решение имеет свои преимущества, и выбор зависит от конкретных требований вашего проекта.
Если проблема сохраняется после применения этих решений, рекомендуется обратиться к документации Cloudflare или на специализированные форумы по Delphi для более детального анализа конкретного случая.
В статье рассматриваются проблемы с SSL-соединением через Cloudflare при использовании Indy в Delphi и предлагаются решения, такие как обновление OpenSSL, настройка TIdSSLIOHandlerSocketOpenSSL, изменение User-Agent или переход на TNetHTTPClient.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS