Подключение к удаленному серверу MySQL из программы Delphi через SSL

StackOverflow https://stackoverflow.com/questions/4295740

Вопрос

У меня нет хороших знаний о принципах SSL, но просто хочу, чтобы шифрование работать для меня. У меня есть DB и пользователь с указанным «требуется X509». Необходимые сертификаты были созданы, как описано в MySQL Docs, и хорошо работать - я могу подключиться к серверу из командной строки Windows.

Проблема возникает, когда я пытаюсь сделать то же самое из моей программы, используя MySQL Client API (без SSL, программа также работает нормально). Используемый блок: http://www.udio-data.de/mysql.html..

Это мои пути действия: 1) Если я просто добавлю mysql_ssl_set () call (с нужными параматами) перед mysql_real_connect (), последний дает общую ошибку соединения SSL. 2) MySQL Docs в en / mysql-ssl-set.html сказать, что функция всегда возвращается 0. Но когда я проверял, что, оказалось, что результат - это номер 11150848. Тогда я написал это:

showmessage(inttostr(mysql_ssl_set(mys, '.\certs\client-key.pem', '.\certs\client-cert.pem', '.\certs\ca-cert.pem', nil)));

... и повторил линию 8 раз. Каждый раз, когда он вернул немного большего количества - 11158528, 11158784, 11159040, ... и два нуля за последние два звонка.

После чего mysql_real_connect () наконец был успешным! Программа даже удалось выполнить некоторые запросы, вернуть их подходящие для них (я знаю данные), но потом разбился с нарушением доступа: запись адреса ... в каком-то месте. Торвальная точка варьировалась между прогонами и небольшими изменениями в коде.

Это выглядит очень похоже на проблему несовместимости версии. Я попробовал библиотеки с помощью Windows Windows Windows MySQL 5,0, так и 5.1 (сервер 5.1 и удаленно работает под Linux; однако 5.0 MySQL-клиентские программы не имеют проблем, когда SSL-подключение к нему), но без успеха.

Кто-нибудь знаком с проблемой? Большое спасибо за помощью и извините за ошибки в вопросе.

Это было полезно?

Решение

Как я вижу объявление mysql_ssl_set неверно. Объявлено:

function mysql_ssl_set(_mysql: PMYSQL; key, cert, ca, capath: PAnsiChar): longint; stdcall;

Но mysql.h содержит:

my_bool     STDCALL mysql_ssl_set(MYSQL *mysql, const char *key,
                      const char *cert, const char *ca,
                      const char *capath, const char *cipher);

Это объясняет мусор взаимной ценностью, AV и так далее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top