質問

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

MySQLクライアントAPIを使用してプログラムから同じことをしようとすると問題が発生します(SSLなしでは、プログラムも正常に機能します)。使用されるユニットは次のとおりです。 http://www.audio-data.de/mysql.html.

これらは私のアクションパスです。1)mysql_real_connect()の前にmysql_ssl_set()call(適切なパラメージを使用)を追加するだけの場合、最後のものは汎用SSL接続エラーを提供します。 2)en/mysql-ssl-set.htmlのmysql docsは、関数は常に0を返すと言います。しかし、それをチェックしたとき、結果は11150848の数であるように見えました。

showmessage(inttostr(mysql_ssl_set(mys, '.\certs\client-key.pem', '.\certs\client-cert.pem', '.\certs\ca-cert.pem', nil)));

...そして、ラインを8回繰り返しました。最後の2つの呼び出しでは、わずかに多くの数値-11158528、11158784、11158784、11159040、および2つのゼロを返すたびに。

その後、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