В данной статье мы рассмотрим проблему настройки REST Datasnap сервера на Delphi для поддержки ECDH (Elliptic Curve Diffie-Hellman) шифров и протокола TLS 1.3, а также альтернативные решения для работы с современными TLS версиями. Основываясь на обсуждении на форуме MikeMon, мы проанализируем возможные причины проблем и предложим пути их решения.
Проблема:
Пользователь MikeMon столкнулся с проблемой при попытке настроить Datasnap REST сервер на Delphi 12.2 Patch 2 для поддержки ECDH шифров вместо RSA. Несмотря на использование ECDH сертификата и обновление Indy до последней версии, сервер не работал корректно, выдавая ошибку SSLV3_ALERT_HANDSHAKE_FAILURE. Также возник вопрос об альтернативах Indy, поддерживающих TLS 1.3.
Анализ ситуации и возможные причины:
Обсуждение на форуме выявило несколько потенциальных проблем:
Версия OpenSSL: Indy поставляется с OpenSSL 1.0.2u, который не поддерживает ECDH и TLS 1.3 "из коробки". Сообщение об ошибке BoringSSL указывает на возможное использование Google-ской реализации OpenSSL, которая может быть установлена на некоторых платформах, например, Android 6+.
Версия TLS: Несмотря на указание использования sslvTLSv1_2, сервер мог все же пытаться использовать SSLv3, что является устаревшим и небезопасным протоколом.
CipherList: Неправильная конфигурация CipherList в TIdSSLOpenIOHandlerServer.Options может приводить к проблемам с согласованием шифров.
Несовместимость Indy и OpenSSL: Обновление Indy до последней версии может привести к несовместимости с установленной версией OpenSSL, что может вызвать сбои в работе Datasnap сервера.
Решение, предложенное в обсуждении:
DelphiUdIT предложил настроить CipherList в TIdSSLOpenIOHandlerServer.Options для включения ECDH шифров. Пример:
Также, важно убедиться, что SSLVersion установлено в sslvTLSv1_2.
Альтернативное решение: sgcWebSockets Library
Sergio (esegece) предложил использовать библиотеку sgcWebSockets, которая заменяет стандартный Datasnap сервер и поддерживает современные протоколы, включая WebSocket и TLS 1.3. Эта библиотека предоставляет компонент TsgcWSHTTPWebBrokerBridgeServer, который заменяет стандартный Datasnap сервер, сохраняя при этом совместимость с существующим кодом.
Преимущества sgcWebSockets:
Поддержка TLS 1.3: Обеспечивает использование самого современного и безопасного протокола TLS.
Поддержка WebSocket: Позволяет использовать WebSocket для двунаправленной связи в реальном времени.
Совместимость: Сохраняет совместимость с существующим кодом Datasnap сервера.
Простота использования: Замена стандартного сервера компонентом TsgcWSHTTPWebBrokerBridgeServer позволяет легко интегрировать новые возможности.
Недостатки sgcWebSockets:
Зависимость от сторонней библиотеки: Требуется установка и настройка сторонней библиотеки.
Потенциальные изменения в коде: Хотя библиотека стремится к совместимости, могут потребоваться незначительные изменения в коде.
Альтернативные решения для поддержки TLS 1.3:
Remy Lebeau упомянул о сторонних GitHub репозиториях, добавляющих поддержку OpenSSL 3.x/TLS 1.3 в Indy. Некоторые из них:
Проверьте версию OpenSSL: Убедитесь, что используете OpenSSL 1.0.2u или более новую версию, поддерживающую ECDH. Если используете Android, проверьте наличие BoringSSL и его совместимость с Indy.
Настройте CipherList: Включите ECDH шифры в CipherList в TIdSSLOpenIOHandlerServer.Options.
Установите SSLVersion: Убедитесь, что SSLVersion установлено в sslvTLSv1_2.
Рассмотрите sgcWebSockets: Если требуется поддержка TLS 1.3 и WebSocket, библиотека sgcWebSockets является отличным решением.
Изучите сторонние репозитории: Если хотите использовать Indy с OpenSSL 3.x/TLS 1.3, изучите доступные GitHub репозитории.
Заключение:
Настройка Datasnap сервера для работы с ECDH и TLS 1.3 может быть сложной задачей, особенно при использовании стандартных компонентов Delphi. Предложенные решения, включая использование библиотеки sgcWebSockets и сторонних репозиториев, позволяют решить эту проблему и обеспечить безопасное и современное взаимодействие с вашим Datasnap сервером. Важно тщательно проверить версию OpenSSL и правильно настроить CipherList, чтобы избежать ошибок и обеспечить совместимость с клиентами.
В статье рассматривается проблема настройки REST Datasnap сервера на Delphi для поддержки ECDH шифров и протокола TLS 1.3, предлагаются пути решения, включая использование альтернативной библиотеки sgcWebSockets и сторонних GitHub репозиториев для обновл
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS