1

SSLをサポートするmysql-5.0.33クライアントライブラリを構築しようとしています。私が使用している

./configure --prefix=<some dir> --exec-prefix=<some dir> --with-openssl=<path to openssl dir> --without-server` 

構成してmakeからmake install

リンク先のOpenSSLのバージョンは1.0.0aです。上記のプロセスに問題やエラーはありません。

今、私は次のようなプログラムを持っています

#include <mysql.h>
#include <stdio.h>
int main() {
   MYSQL *conn;
   MYSQL_RES *res;
   MYSQL_ROW row;
   char *server = "192.168.1.62";
   char *user = "testssl";
   char *password = "testssl"; /* set me first */
   char *database = "mysql";
   int port = 3321;
   conn = mysql_init(NULL);
   mysql_ssl_set(conn, "client-key.pem", "client-cert.pem", "ca-cert.pem", NULL, "DHE-RSA-AES256-SHA");

   mysql_options(conn, MYSQL_OPT_CONNECT_TIMEOUT, "30");

   /* Connect to database */
   if (!mysql_real_connect(conn, server,
         user, password, database, port, NULL, 0)) {
      fprintf(stderr, "Real connect: %d: %s\n", mysql_errno(conn), mysql_error(conn));
      return 1;
   }

   printf("SSL cipher used: %s \n", mysql_get_ssl_cipher(conn));

   /* send SQL query */
   if (mysql_query(conn, "show tables;")) {
      fprintf(stderr, "\nQuery: %s\n", mysql_error(conn));
      return 1;
   }
   res = mysql_use_result(conn);
   /* output table name */
   printf("Results:\n");
   while ((row = mysql_fetch_row(res)) != NULL)
      printf("%s \n", row[0]);


   /* close connection */
   mysql_free_result(res);
   mysql_close(conn);
   return 0;
}

このプログラムは次のようにビルドされます。

gcc -o mysql-ssl-test -I <some dir>/include/mysql/ mysql-ssl-test.c -L <some dir>/lib/mysql/ -lmysqlclient -lpthread -lz -lm -lrt -lssl -lcrypto -ldl`

私が接続しているmysqlサーバー(192.168.1.62)ではsslが有効になっており、ユーザーtestsslはssl経由でのみ接続できます(GRANT ... REQUIRE SSL)。mysqlコマンドラインまたはSqlyogなどの他のmysqlクライアントラインを使用してサーバーに接続するのに問題はありません。

Real connect: 2026: SSL connection errorこのコマンドでプログラムを実行しようとするとエラーが発生しますが、このコマンドで実行しようとすると正常LD_LIBRARY_PATH=<some dir>/lib/mysql/ ./mysql-ssl-testに実行されます./mysql-ssl-test(ここでは、v5.5.25およびOpenSSL 1.0.0-fipsであるシステムlibmysqlclientとリンクしようとします)

興味深いことに、私がラインを交換した場合

mysql_ssl_set(conn, "client-key.pem", "client-cert.pem", "ca-cert.pem", NULL, "DHE-RSA-AES256-SHA");` 

mysql_ssl_set(conn, "client-key.pem", "client-cert.pem", "ca-cert.pem", NULL, NULL);` 

でも問題なく動作しLD_LIBRARY_PATH=<some dir>/lib/mysql/ ./mysql-ssl-testます。

これは私が遭遇したmysql5.0.33またはOpenSSL1.0.0aのバグですか(そのようなバグをグーグルで検索しても役に立ちませんでした)、またはlibmysqlclientのビルド中にいくつかの失敗をしています。

4

1 に答える 1

0

修正:MySQL5.0.33のある種のバグでした。5.0.86にアップグレードすることで修正されました。

于 2012-06-20T17:29:07.767 に答える