MySQL强制加密需服务端设require_secure_transport=ON、客户端配requireSSL=true+verifyServerCertificate=true+allowPublicKeyRetrieval=false,并验证Ssl_cipher非空及抓包确认TLS握手。

必须强制加密,不能只靠“勾选SSL”就以为安全了——DBeaver 默认不验证证书,不设密码套件限制,不拒绝明文回退,这些都得手动堵死。
MySQL 连接中 useSSL=true 不等于强制加密
很多人在驱动属性里加了 useSSL=true,测试连接成功就以为搞定了,结果抓包一看流量还是明文。这是因为 MySQL JDBC 驱动默认允许降级到非 SSL 模式(即 allowPublicKeyRetrieval=true + useSSL=true 组合下仍可能绕过加密)。
- 必须同时设置
requireSSL=true:强制驱动拒绝任何非 SSL 握手 - 必须显式关闭降级通道:
allowPublicKeyRetrieval=false - 如果服务端已配置
REQUIRE SSL(如执行过ALTER USER 'u'@'%' REQUIRE SSL),客户端还必须配verifyServerCertificate=true,否则会报Unable to verify server certificate - 证书路径要写绝对路径,例如
serverSslCert=/etc/mysql/ca.pem,相对路径在 DBeaver 中常失效
PostgreSQL 的 sslmode=verify-full 是唯一真正强制的模式
sslmode=require 只保证加密,不校验证书;sslmode=verify-ca 校验 CA 签发关系但不核对域名;只有 sslmode=verify-full 才同时满足:加密传输 + 证书由可信 CA 签发 + 主机名与证书 CN/SAN 匹配。
- 必须配
sslrootcert=/path/to/ca.crt,且文件权限不能是 777(Java SSL 实现会拒绝加载) - 若服务端证书 CN 是
pg.example.com,而你用 IP 连接(如10.1.2.3),即使证书有效也会失败——必须用域名连,或改用 SAN 包含该 IP 的证书 - DBeaver 的 SSL 标签页里勾选“启用 SSL”后,
sslmode仍需在“驱动属性”里手动填,界面不会自动同步这个关键参数
Oracle 和 SQL Server 的 SSL 强制逻辑完全不同
Oracle 使用 JDBC URL 参数 oracle.net.ssl_version=TLSv1.2 和 javax.net.ssl.trustStore 系统属性控制,DBeaver 的 SSL 标签页对其基本无效;SQL Server 则依赖 encrypt=true + trustServerCertificate=false 组合,后者才是强制证书验证的开关。
- Oracle:必须在“驱动属性”里加
ssl=true,再额外设置 JVM 参数(通过 DBeaver.ini 添加-Djavax.net.ssl.trustStore=...),否则ssl=true会被忽略 - SQL Server:
encrypt=true仅开启加密,trustServerCertificate=false才触发证书链校验——漏掉后者,攻击者仍可伪造自签名证书中间人劫持 - 这两类数据库的证书错误通常不报具体原因,而是笼统提示
Connection reset或Handshake failed,需打开 DBeaver 日志(Help → Show Log)查javax.net.ssl.SSLHandshakeException细节
验证是否真被强制了?别信“测试连接成功”
“测试连接”按钮只验证能否执行 SELECT 1,不校验加密强度、不拦截明文回退、不检查证书有效期。真正的验证方式只有两个:
- 在目标数据库服务器上运行
SELECT * FROM pg_stat_ssl(PostgreSQL)或SHOW STATUS LIKE 'Ssl%'(MySQL),确认ssl_cipher非空且协议是 TLSv1.2+,ssl_version不是SSLv3 - 用
tcpdump -i any port 5432 or port 3306 -w ssl-test.pcap抓包,用 Wireshark 打开后看 TLS 握手阶段是否出现Encrypted Handshake Message,且应用层数据无明文 SQL 出现 - 临时把 CA 证书文件改名或删掉,如果连接依然成功,说明根本没走证书验证——这是最常见也最危险的“假强制”
强制加密不是配完就结束的事,它依赖服务端策略、客户端参数、证书状态、网络中间设备四者协同。少一个环节,就可能退化成裸奔。尤其是生产环境,每次升级 DBeaver 或数据库小版本后,都得重新跑一遍抓包验证。


















