Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Проблемы с SSL-подключением в Delphi к MariaDB через MyDAC: решение ошибки SSL_do_handshake

Delphi , Базы данных , ODBC

 

Введение

При работе с базами данных в Delphi через MyDAC (My Data Access Components) разработчики часто сталкиваются с необходимостью установки безопасного соединения с сервером MariaDB через SSL. В данной статье мы рассмотрим распространенную ошибку SSL_do_handshake и предоставим пошаговое решение этой проблемы.

Описание проблемы

Ошибка SSL_do_handshake с кодом -1 и дополнительной информацией SSL_get_error(..., r2) = 1 обычно возникает при попытке установить SSL-соединение между клиентским приложением на Delphi и сервером MariaDB. В представленном коде проблема проявляется, несмотря на корректную настройку параметров SSL.

Анализ кода

Рассмотрим предоставленный код подключения:

procedure TSQLHelper.Connect(const Host, Database, User, Password: string; const SSLConnect: Boolean);
begin
  FHost := Host;
  FDatabase := Database;
  FUsername := User;
  FPassword := Password;
  FSSLConnect := SSLConnect;

  try
    if SSLConnect then
    begin
      FConnection.Options.Protocol := TMyProtocol.mpSSL;
      FConnection.SSLOptions.CipherList := 'All';
    end;

    FConnection.Server := FHost;
    FConnection.Database := FDatabase;
    FConnection.Username := FUsername;
    FConnection.Password := FPassword;
    FConnection.Options.UseUnicode := True;

    FConnection.Connected := True;
  except
    on E: Exception do
    begin
      FLastErrNo := 1001;
      FLastError := 'Error connecting to Server ' + FHost + ' with User ' + FUsername + ': ' + E.Message;
    end;
  end;
end;

Возможные причины ошибки

  1. Несовместимость версий OpenSSL - клиент и сервер используют разные версии библиотек OpenSSL
  2. Неправильный путь к SSL-библиотекам - приложение не может найти или загрузить необходимые DLL
  3. Несоответствие шифров - клиент и сервер не могут договориться о поддерживаемых алгоритмах шифрования
  4. Проблемы с сертификатами - отсутствие или недоверие к корневому сертификату

Пошаговое решение

1. Проверка версий OpenSSL

Убедитесь, что версии OpenSSL на клиенте и сервере совместимы. Для этого можно использовать команду на сервере:

openssl version

И проверить версию клиентских библиотек в вашем приложении.

2. Указание явного пути к SSL-библиотекам

Добавьте в код явное указание пути к библиотекам OpenSSL:

if SSLConnect then
begin
  FConnection.Options.Protocol := TMyProtocol.mpSSL;
  FConnection.SSLOptions.CipherList := 'All';
  FConnection.SSLOptions.SSLLibPath := 'C:\path\to\your\ssl\libs\';
end;

3. Настройка списка шифров

Попробуйте использовать конкретные шифры, которые поддерживаются сервером:

FConnection.SSLOptions.CipherList := 'ECDHE-RSA-AES256-GCM-SHA384';

4. Указание корневого сертификата

Добавьте в код указание на корневой сертификат:

FConnection.SSLOptions.CACert := 'C:\path\to\your\ca-cert.pem';

5. Полный пример рабочего кода

procedure TSQLHelper.Connect(const Host, Database, User, Password: string; const SSLConnect: Boolean);
begin
  FHost := Host;
  FDatabase := Database;
  FUsername := User;
  FPassword := Password;
  FSSLConnect := SSLConnect;

  try
    if SSLConnect then
    begin
      FConnection.Options.Protocol := TMyProtocol.mpSSL;
      FConnection.SSLOptions.CipherList := 'ECDHE-RSA-AES256-GCM-SHA384';
      FConnection.SSLOptions.SSLLibPath := 'C:\path\to\your\ssl\libs\';
      FConnection.SSLOptions.CACert := 'C:\path\to\your\ca-cert.pem';
    end;

    FConnection.Server := FHost;
    FConnection.Database := FDatabase;
    FConnection.Username := FUsername;
    FConnection.Password := FPassword;
    FConnection.Options.UseUnicode := True;

    FConnection.Connected := True;
  except
    on E: Exception do
    begin
      FLastErrNo := 1001;
      FLastError := 'Error connecting to Server ' + FHost + ' with User ' + FUsername + ': ' + E.Message;
      raise; // Перебросить исключение для дальнейшей обработки
    end;
  end;
end;

Альтернативные решения

1. Использование MariaDB Connector вместо MyDAC

Рассмотрите возможность использования официального MariaDB Connector для Delphi:

uses
  MariaDB.Data;

var
  Conn: TMariaDBConnection;
begin
  Conn := TMariaDBConnection.Create(nil);
  try
    Conn.Server := '192.168.184.130';
    Conn.Database := 'your_database';
    Conn.Username := 'testuser';
    Conn.Password := 'password';
    Conn.SSLMode := sslRequired;
    Conn.Connect;
  finally
    Conn.Free;
  end;
end;

2. Проверка соединения без SSL

Для диагностики временно отключите SSL и проверьте базовое соединение:

procedure TSQLHelper.TestConnectionWithoutSSL;
begin
  try
    FConnection.Options.Protocol := TMyProtocol.mpTCP;
    FConnection.Server := FHost;
    FConnection.Database := FDatabase;
    FConnection.Username := FUsername;
    FConnection.Password := FPassword;
    FConnection.Connected := True;
    ShowMessage('Connection successful without SSL');
    FConnection.Connected := False;
  except
    on E: Exception do
      ShowMessage('Error without SSL: ' + E.Message);
  end;
end;

Заключение

Ошибка SSL_do_handshake при подключении к MariaDB через MyDAC в Delphi обычно связана с несовместимостью SSL-параметров между клиентом и сервером. Представленные в статье решения помогут вам диагностировать и устранить эту проблему. Наиболее эффективными мерами являются:

  1. Проверка совместимости версий OpenSSL
  2. Явное указание путей к SSL-библиотекам
  3. Настройка списка поддерживаемых шифров
  4. Указание корневого сертификата

Если проблема сохраняется, рассмотрите возможность использования альтернативных компонентов для подключения к MariaDB или обратитесь к документации MyDAC для получения дополнительной информации о настройке SSL-соединений.

Создано по материалам из источника по ссылке.

Описание решения ошибки SSL_do_handshake при SSL-подключении в Delphi к MariaDB через MyDAC


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: ODBC ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-04 06:42:49/0.005789041519165/0