使用mysql2 gem连接MySQL 8.4.5服务器时遇TLS/SSL证书信任问题
解决Windows下Ruby mysql2 gem连接MySQL 8.4.5的SSL验证错误
核心原因
MySQL 8.4.5默认启用SSL并使用自签名证书,Windows系统的信任根存储不包含该证书;同时你可能误用了mysql2 gem的参数名(比如用sslverify而非正确的ssl_verify_server_cert),导致禁用SSL验证的设置未生效。
解决方案
方案1:修正客户端连接参数(无需修改服务器)
确保连接代码使用正确的参数名关闭证书验证,示例代码:
client = Mysql2::Client.new( host: '你的MySQL服务器IP', username: 'user', password: 'somepassword', database: 'Jungle', ssl_mode: :disabled, ssl_verify_server_cert: false )
注意:ssl_verify_server_cert是mysql2 gem的标准参数,而非sslverify,参数名错误会导致设置无效。
方案2:服务器端禁用SSL(如果不需要加密连接)
- 编辑Debian上的MySQL配置文件,路径通常为
/etc/mysql/mysql.conf.d/mysqld.cnf - 在
[mysqld]区块添加或修改:
skip_ssl
- 重启MySQL服务:
sudo systemctl restart mysql
重启后服务器不再强制SSL连接,客户端无需处理证书验证。
方案3:信任服务器自签名证书(保留SSL加密)
如果需要保留SSL连接,可在连接时指定服务器证书路径:
- 从Debian服务器复制默认CA证书,路径为
/var/lib/mysql/ca.pem,传到Windows客户端的某个目录 - 修改连接代码指定证书路径:
client = Mysql2::Client.new( host: '你的MySQL服务器IP', username: 'user', password: 'somepassword', database: 'Jungle', ssl_mode: :required, ssl_ca: 'C:/路径/到/ca.pem' )
内容的提问来源于stack exchange,提问作者PrincessPeachTheDev
相关产品推荐
相关产品推荐

