SSL是否生效需手动查看连接信息中“SSL”状态:Not in use为明文,Enabled表示协商但未验证证书,Verified表示证书已信任且校验通过;还需确认驱动参数、服务端配置及证书有效性。

连接成功后怎么看 SSL 是否生效
连接建立后,DBeaver 不会主动弹窗告诉你“SSL 已启用”,必须手动查。最直接的方式是看连接详情页右下角的状态栏:点击连接名右侧的 ⓘ 图标(或右键连接 → Connection information),在弹出窗口里找 SSL 这一行。
常见值有三种:
-
SSL: Not in use→ 明文传输,没走加密 -
SSL: Enabled→ 驱动协商了 SSL,但未验证证书(比如只设了useSSL=true) -
SSL: Verified→ 证书被客户端信任且校验通过(推荐状态)
注意:SSL: Enabled 容易误判为“已安全”,其实它可能跳过了证书验证,中间人攻击仍可实施。
为什么勾选了“Use SSL”还是显示 Not in use
勾选 UI 上的 Use SSL 只是开关,不等于强制启用。DBeaver 底层用 JDBC 驱动,是否真正走 SSL 取决于连接 URL 中的参数组合。典型失败原因包括:
- MySQL 驱动版本太低(
mysql-connector-java 8.0.28之前默认useSSL=true仅提示,不强制) - 连接 URL 里漏了关键参数,比如只加了
useSSL=true,但没配requireSSL=true或verifyServerCertificate=true - 服务器端未配置 SSL(
SHOW VARIABLES LIKE 'have_ssl';返回DISABLED) - DBeaver 的驱动属性里手动覆盖了 SSL 参数,例如填了
useSSL=false(优先级高于 UI 勾选)
验证方法:点开连接设置 → Driver properties 标签页,检查是否存在 useSSL、requireSSL、verifyServerCertificate 这三个 key,它们的值必须协同生效。
PostgreSQL 和 MySQL 的 SSL 参数写法差异
虽然 DBeaver UI 看起来一样,但底层 JDBC URL 构造逻辑不同,参数名和含义容易混用:
- MySQL:
useSSL=true(开启协商)、requireSSL=true(强制加密)、verifyServerCertificate=true(校验证书)——三者缺一不可才稳定显示Verified - PostgreSQL:
ssl=true(等价于useSSL)、sslmode=require(等价于requireSSL)、sslmode=verify-full(含主机名校验)——sslmode=prefer会导致即使服务端支持 SSL,客户端也可能降级为明文 - 别把 MySQL 的
requireSSL=true直接抄到 PostgreSQL 驱动属性里,它会被忽略,还可能报错Unknown property
建议:优先用 UI 勾选 + 对应数据库的官方推荐 sslmode(PG)或 requireSSL(MySQL),少手动填 URL 参数,避免拼写错误。
SSL 显示 Verified 但实际不安全的隐藏坑
就算状态栏写着 SSL: Verified,也不代表链路绝对安全。最容易被忽略的两个点是:
- 证书过期或域名不匹配:DBeaver 默认不校验主机名(除非你显式设
sslmode=verify-full或serverSslCert=/path/to/ca.pem),所以连错 IP 或用 IP 直连时,证书里的 CN/SAN 不匹配也不会报错 - Java 信任库未更新:如果服务器用了私有 CA 签发的证书,而你的 DBeaver(基于 Java)没把该 CA 导入
$JAVA_HOME/jre/lib/security/cacerts,就会 fallback 到Enabled而非Verified,但 UI 可能不提示
真要确认加密强度,得进连接后的 SQL 编辑器执行一句:SHOW STATUS LIKE 'Ssl_cipher';(MySQL)或 SELECT ssl_is_used();(PostgreSQL)。返回非空值且 cipher 名称合理(如 ECDHE-RSA-AES256-GCM-SHA384),才算落到了实处。











