黑马redis p114高级篇多级缓存02连接docker创建的数据库,在测试的时候报错 禁用ssl解决问题详细解释
问题描述
在黑马redis P114这节课中,来连接docker创建的数据库,在测试的时候报错


解决
点击Advanced选项,找到下面useSSL选项,将其设置为false,然后再测试连接,就连接成功了。

为什么禁用ssl之后就可以正常连接了
因为您的MySQL服务器和您的JDBC驱动(连接程序)在“加密通话”时使用的“语言版本”(TLS协议)不一致,导致双方无法沟通。禁用SSL后,你们就不再尝试“加密通话”,而是改用“明文聊天”,自然就没有了沟通障碍。
useSSL=false 虽然解决了连接问题,但意味着您的所有数据(包括用户名、密码、查询内容、结果集)都会以明文形式在网络上传输。如果您的服务器不在一个绝对安全的内部网络(如本机开发、隔离的局域网),这将产生极大的安全风险,可能被他人窃听。
技术细节深度解析
背后的技术细节主要有两点:
1. 协议版本不匹配 (Protocol Version Mismatch)
这是最可能的原因。较新版本的MySQL JDBC驱动(如8.0系列)为了安全起见,默认禁用了旧的、被证实存在安全漏洞的TLS协议版本(如TLSv1.0, TLSv1.1),只启用更新的版本(如TLSv1.2, TLSv1.3)。
然而,如果您连接的MySQL服务器版本比较旧(比如5.6或5.7的早期版本),它可能只支持那些旧的、已被客户端禁用的协议。
当客户端说“我只要A和B”,服务器说“我只有C和D”时,SSL/TLS握手就会失败。
2. SSL证书问题 (SSL Certificate Issue)
还有一种可能的原因是服务器配置的SSL证书有问题。
自签名证书 (Self-Signed Certificate):服务器可能使用了一个自己创建的、未经公共证书颁发机构(CA)认证的证书。JDBC驱动默认不信任这种证书,会认为连接不安全而拒绝。
证书过期或配置错误:服务器的证书可能已过期,或者域名不匹配等。
当您设置 useSSL=false 时,客户端完全跳过了对整个SSL/TLS握手过程的检查,包括协议协商和证书验证,因此绕过了所有上述问题。
建议在什么情况下通过禁用ssl来解决问题呢
开发/测试环境:如果这只是您本地电脑连接本地数据库,或者在一个安全的内部测试网络中,临时使用 useSSL=false 是可以接受的,优先保证开发效率。
生产环境:绝对不要在生产环境中禁用SSL。您应该:
升级MySQL服务器到更新版本,以支持安全的TLSv1.2+协议(这是根本解决方案)。
或者,在MySQL服务器端正确配置SSL证书,并在客户端连接字符串中添加 &trustCertificateKeyStoreUrl=file:path_to_truststore&trustCertificateKeyStorePassword=your_password 来信任服务器的证书。
更多推荐


所有评论(0)