我对SSL原则没有很好的了解,但只希望加密对我有用。我有一个DB和一个指定“ requient x509”的用户。已经如MySQL文档所述创建了必要的证书,并且可以正常工作 - 我可以从Windows命令行连接到服务器。

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

这些是我的动作路径:1)如果我只是在mysql_real_connect()之前添加mysql_ssl_set()呼叫(带有适当的params),则最后一个给出通用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连接时不会遇到麻烦),但没有成功。

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

有帮助吗?

解决方案

如我所见,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