繁体   English   中英

通过SSL从Delphi程序连接到远程MySQL服务器

[英]Connecting to a remote MySQL server from a Delphi program through SSL

我不太了解SSL原则,但只是希望加密对我有用。 我有一个DB和一个指定了“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下远程运行;但是,当连接SSL时,5.0 mysql-client程序没有麻烦),但没有成功。

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

我看到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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM