2010-11-28 240 views
3

我对SSL原理并不了解,但只是希望加密适用于我。 我有一个DB和一个指定了“REQUIRE X509”的用户。 必要的证书已按照MySQL文档中的描述创建,并且运行良好 - 我可以从Windows命令行连接到服务器。通过SSL从Delphi程序连接到远程MySQL服务器

问题出现了,当我试图从我的程序使用MySQL客户端API(没有SSL,程序也可以正常工作)做同样的事情。 使用的单位是:http://www.audio-data.de/mysql.html。 1)如果我只是在mysql_real_connect()之前添加了mysql_ssl_set()调用(具有适当的参数),最后一个给出了通用的SSL连接错误。 2)MySQL文档在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()终于成功了!该程序甚至设法执行一些查询,为它们返回适当的结果(我知道这些数据),但之后它崩溃,出现访问冲突:写地址...在某个地方。 碰撞点在运行和代码的轻微变化之间变化。

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

有人熟悉这个问题吗?非常感谢帮助&抱歉的问题中的错误。

回答

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的等垃圾。

+0

这样做。你可能节省了很多我的时间。 Tnanks。 – hhyhbpen 2010-11-28 15:34:43

相关问题