You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过代码解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 22:47:03