簡體   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