3

我对 SSL 原则没有很好的了解,但只是希望加密对我有用。我有一个数据库和一个指定了“REQUIRE X509”的用户。已按照 MySQL 文档中的说明创建了必要的证书,并且运行良好 - 我可以从 Windows 命令行连接到服务器。

问题出现了,当我尝试使用 MySQL Client API 从我的程序中执行相同操作时(没有 SSL,该程序也可以正常工作)。使用的单位是:http ://www.audio-data.de/mysql.html 。

这些是我的操作路径: 1) 如果我只是在 mysql_real_connect() 之前添加 mysql_ssl_set() 调用(带有适当的参数),最后一个会给出一般的 SSL 连接错误。2) en/mysql-ssl-set.html 中的 MySQL 文档说,该函数总是返回 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() 终于成功了!该程序甚至设法执行一些查询,为它们返回正确的结果(我知道数据),但随后它因访问冲突而崩溃:在某个地方写入地址。崩溃点因运行和代码的细微更改而异。

它看起来很像版本不兼容问题。我尝试了 MySQL 5.0 和 5.1 Windows 安装中的库(服务器是 5.1 并在 Linux 下远程运行;但是,5.0 mysql-client 程序在 SSL 连接到它时没有问题),但没有成功。

有人熟悉这个问题吗?非常感谢您的帮助,并对问题中的错误深表歉意。

4

1 回答 1

3

我看到 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 等等。

于 2010-11-28T07:40:40.940 回答