2010-11-28 30 views
3

私はSSLの原則について十分に理解していませんが、私にとっては暗号化を有効にしたいだけです。 DBと「REQUIRE X509」を指定したユーザーがあります。 必要な証明書は、MySQLのドキュメントに記載されているように作成され、正常に動作します。私はWindowsのコマンドラインからサーバーに接続できます。DelphiプログラムからSSL経由でリモートMySQLサーバに接続

問題は、MySQLクライアント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、...と最後の2回の呼び出しで2つの数値が返されます。

その後、最後にmysql_real_connect()が成功しました!プログラムはいくつかのクエリを実行し、それらのために適切な結果を返しました(私はデータを知っています)が、その後、アクセス違反:アドレスの書き込みをいくつかの場所でクラッシュしました。 実行時とコードのわずかな変更時にクラッシュポイントが異なります。

バージョンの非互換性の問題のようです。私はMySQL 5.0と5.1両方のWindowsインストールからライブラリを試しました(サーバーは5.1でリモートでLinuxで動作しますが、5.0のmysql-clientプログラムはSSL接続時に問題がありません)。

誰もがこの問題に精通していますか?助けをありがとう&ご迷惑をおかけして申し訳ありません。

答えて

3

mysql_ssl_set宣言が正しくないことがわかります。これは、宣言されます。

function mysql_ssl_set(_mysql: PMYSQL; key, cert, ca, capath: PAnsiChar): longint; stdcall; 

しかしmysql.hが含まれています:返り値、AVのなどでゴミを説明

my_bool  STDCALL mysql_ssl_set(MYSQL *mysql, const char *key, 
         const char *cert, const char *ca, 
         const char *capath, const char *cipher); 

を。

+0

それをしました。あなたはおそらく多くの時間を節約しました。 Tanks。 – hhyhbpen

関連する問題