2010-11-28 284 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

相關問題