如何通过代码解决MariaDB Connector/C 3.4.8 Win64的SSL连接错误
MariaDB连接TLS/SSL错误的代码修复方案
问题背景
安装mariadb-connector-c-3.4.8-win64.msi SDK后,连接Fedora 40系统上的MariaDB服务器时,出现如下报错:
TLS/SSL error: SSL is required, but the server does not support it
服务器版本信息
> dnf list installed|grep -i maria mariadb.x86_64 3:10.11.11-1.fc40 @updates mariadb-backup.x86_64 3:10.11.11-1.fc40 @updates mariadb-client-utils.x86_64 3:10.11.11-1.fc40 @updates mariadb-common.noarch 3:10.11.11-1.fc40 @updates mariadb-connector-c.x86_64 3.3.8-3.fc40 @fedora mariadb-connector-c-config.noarch 3.3.8-3.fc40 @fedora mariadb-cracklib-password-check.x86_64 3:10.11.11-1.fc40 @updates mariadb-errmsg.noarch 3:10.11.11-1.fc40 @updates mariadb-gssapi-server.x86_64 3:10.11.11-1.fc40 @updates mariadb-server.x86_64 3:10.11.11-1.fc40 @updates mariadb-server-utils.x86_64 3:10.11.11-1.fc40 @updates perl-DBD-MariaDB.x86_64 1.23-4.fc40 @fedora
报错的连接代码
// Connect to MariaDB. MYSQL* pconn = mysql_init( nullptr ); if ( !mysql_real_connect( pconn, "192.168.11.1", "foo", "bar", "database", 0, nullptr, 0 ) ) { fprintf( stderr, "mysql_real_connect(): %s\n", mysql_error( pconn ) ); return 1; } printf( "mysql_real_connect(): SUCCESS\n" ); // Your code here. mysql_close( pconn ); printf( "mysql_close(): SUCCESS\n" );
代码修复方法
问题根源是MariaDB Connector/C 3.4.x版本默认强制启用SSL连接要求,但你的服务器未配置SSL支持。以下两种代码方式可直接解决:
方法1:设置SSL模式为禁用(推荐)
在mysql_real_connect调用前,通过mysql_options明确设置SSL模式为SSL_MODE_DISABLED,跳过SSL检查:
// Connect to MariaDB. MYSQL* pconn = mysql_init( nullptr ); // 添加禁用SSL的配置 mysql_options(pconn, MYSQL_OPT_SSL_MODE, SSL_MODE_DISABLED); if ( !mysql_real_connect( pconn, "192.168.11.1", "foo", "bar", "database", 0, nullptr, 0 ) ) { fprintf( stderr, "mysql_real_connect(): %s\n", mysql_error( pconn ) ); return 1; } printf( "mysql_real_connect(): SUCCESS\n" ); // Your code here. mysql_close( pconn ); printf( "mysql_close(): SUCCESS\n" );
方法2:通过mysql_ssl_set禁用SSL
调用mysql_ssl_set并传递所有空参数,明确告知客户端不使用SSL加密:
// Connect to MariaDB. MYSQL* pconn = mysql_init( nullptr ); // 传递空参数禁用SSL mysql_ssl_set(pconn, NULL, NULL, NULL, NULL, NULL); if ( !mysql_real_connect( pconn, "192.168.11.1", "foo", "bar", "database", 0, nullptr, 0 ) ) { fprintf( stderr, "mysql_real_connect(): %s\n", mysql_error( pconn ) ); return 1; } printf( "mysql_real_connect(): SUCCESS\n" ); // Your code here. mysql_close( pconn ); printf( "mysql_close(): SUCCESS\n" );
说明
- 方法1是Connector/C 3.2+引入的标准配置方式,语义更清晰,优先推荐。
- 如果后续服务器配置了SSL支持,只需移除该配置即可恢复SSL连接。
内容的提问来源于stack exchange,提问作者Swiss Frank
相关产品推荐
相关产品推荐

