3

私は SSL の原則について十分な知識を持っていませんが、暗号化を機能させたいだけです。「REQUIRE X509」が指定されたDBとユーザーがいます。必要な証明書は、MySQL のドキュメントで説明されているように作成されており、うまく機能しています。Windows コマンド ラインからサーバーに接続できます。

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 を返すと書かれています。

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 接続時に問題はありません) のライブラリを試しましたが、成功しませんでした。

この問題に精通している人はいますか?助けてくれてありがとう、質問の間違いをお詫びします。

4

1 に答える 1

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 などのガベージを説明しています。

于 2010-11-28T07:40:40.940 に答える