能否使用MySQL服务端证书实现SSL连接?Spring Boot连库需改配置吗?
MySQL服务端证书SSL连接问题答复
核心结论
- 你当前必须修改数据库连接串,现有连接串显式关闭了SSL协商能力,是Spring Boot应用连接失败的直接原因
- 仅使用MySQL服务端证书完全可以完成SSL连接,属于SSL单向认证场景,不需要应用侧额外部署客户端证书、修改业务代码,和DBA描述的用户层面配置逻辑一致。
问题原因说明
你当前使用的连接串包含useSSL=false&requireSSL=false参数,会强制JDBC驱动走非SSL明文连接逻辑,而你使用的账号已被DBA配置为必须走SSL连接,两边协商逻辑不匹配自然会连接失败。
MySQL Workbench能正常连接是因为客户端默认开启SSL自动协商,遇到要求SSL的账号会自动拉取服务端证书建立加密通道,不会硬编码禁用SSL。
DBA提到的“应用层无需做任何修改”指的是不需要改造业务逻辑、不需要配置客户端双证,不代表连接串里显式禁用SSL的错误参数不需要调整。
可用连接串配置
内网信任环境(无需校验服务端证书)
如果是内网部署、信任数据库服务端身份,不需要做证书合法性校验,直接把连接串调整为如下即可,不需要额外导入证书文件:
jdbc:mysql://host:port/schema?autoReconnect=true&useSSL=true&requireSSL=true&verifyServerCertificate=false&zeroDateTimeBehavior=convertToNull
生产环境(需校验服务端证书防中间人攻击)
如果是公网/不可信网络环境,需要校验服务端证书合法性,提前将MySQL服务端证书导入应用侧JDK信任库或自定义信任库后,使用如下连接串:
jdbc:mysql://host:port/schema?autoReconnect=true&useSSL=true&requireSSL=true&verifyServerCertificate=true&trustCertificateKeyStoreUrl=file:/path/to/truststore&trustCertificateKeyStorePassword=你的信任库密码&zeroDateTimeBehavior=convertToNull
该场景同样不需要客户端证书,仅需配置服务端证书的信任规则即可。
内容的提问来源于stack exchange,提问作者watanayz
相关产品推荐
相关产品推荐

