【问题标题】:building mysql client library with ssl support构建具有 ssl 支持的 mysql 客户端库
【发布时间】:2012-06-19 10:36:29
【问题描述】:

我正在尝试构建支持 SSL 的 mysql-5.0.33 客户端库。我正在使用

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

配置然后makemake 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 命令行或其他 mysql 客户端行(如 Sqlyog)连接到服务器没有问题。

现在我收到错误Real connect: 2026: SSL connection error,当我尝试使用此命令LD_LIBRARY_PATH=&lt;some dir&gt;/lib/mysql/ ./mysql-ssl-test 运行程序但使用此命令./mysql-ssl-test 运行时它运行良好(这里它尝试与系统libmysqlclient 链接,它是v5.5.25 和 OpenSSL 1.0.0-fips)

有趣的是,如果我替换该行

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=&lt;some dir&gt;/lib/mysql/ ./mysql-ssl-test,它也能正常运行。

这是我遇到的 mysql 5.0.33 或 OpenSSL 1.0.0a 的错误(谷歌搜索此类错误没有帮助)还是我在构建 libmysqlclient 时犯了一些错误。

【问题讨论】:

    标签: mysql c build libmysql


    【解决方案1】:

    已修复:这是 MySQL 5.0.33 中的某种错误。通过升级到 5.0.86 修复。

    【讨论】:

      猜你喜欢
      • 2013-09-24
      • 2012-07-23
      • 2019-11-18
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多