2012-06-19 39 views
1

我想用SSL支持來構建mysql-5.0.33客戶端庫。我使用用ssl支持構建mysql客戶端庫

./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命令行或Sqlyog等其他mysql客戶端連接到服務器時,我沒有問題。

現在我得到錯誤Real connect: 2026: SSL connection error,當我試圖用這個命令LD_LIBRARY_PATH=<some dir>/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=<some dir>/lib/mysql/ ./mysql-ssl-test

這是我遇到的mysql 5.0.33或OpenSSL 1.0.0a的一個bug(搜索這樣的bug無濟於事)或者我在構建libmysqlclient時做了一些失誤。

回答

0

修正:這是MySQL 5.0.33中的某種錯誤。通過升級到5.0.86修復。