MySql.Data 8.0.26连接MariaDB出现SSL Connection Error如何解决?
问题根因
MySql.Data 从8.0.26版本开始,连接字符串的SslMode参数默认值从Preferred(优先尝试SSL,失败则降级为非SSL)调整为Required(强制要求SSL连接),而绝大多数本地部署、测试环境的MariaDB默认没有配置SSL证书,SSL握手失败就会抛出对应的连接错误。
适配8.0.26版本的解决方案
方案1:非生产/不需要SSL加密的场景
直接在连接字符串中显式指定SslMode参数为None或者Preferred即可修复报错,修改后的连接字符串示例:
DATABASE=myDB; data source=localhost; user=root; PASSWORD=pass; POOLING=FALSE;SslMode=Preferred;
如果完全不需要SSL加密,也可以设置为SslMode=None。
修改后的测试代码示例:
class Program { static void Main(string[] args) { MySqlConnection con = new MySqlConnection("DATABASE=myDB; data source=localhost; user=root; PASSWORD=pass; POOLING=FALSE;SslMode=Preferred;"); con.Open(); } }
方案2:生产环境需要SSL加密的场景
如果是线上环境需要SSL加密保障数据传输安全,需要先在MariaDB服务端配置合法的SSL证书,之后在连接字符串中补充证书校验相关参数即可:
- 若使用公共CA签发的可信证书,只需要指定
SslMode=Required,客户端会自动校验证书有效性 - 若使用自签名证书,需要额外添加
SslCa参数指定CA根证书路径,示例:
DATABASE=myDB; data source=你的服务端地址; user=root; PASSWORD=你的密码;SslMode=Required;SslCa=C:/ssl/ca.pem;
注意事项
如果配置SslMode=Required后仍然报错,可在连接字符串中添加TlsVersion=Tls12显式指定TLS版本,部分旧版本MariaDB默认不支持更高版本的TLS协议,会导致握手失败。
内容的提问来源于stack exchange,提问作者RojoBarclay
相关产品推荐
相关产品推荐

