Navicat 17 Oracle连接测试成功但未加密,因SSL默认关闭且“测试连接”不验证加密;必须正确配置含orannzsbb*.dll的64位Instant Client、启用OCI环境、勾选Use SSL并填CA证书,再通过tcps协议或抓包确认真实加密。

Navicat 17 默认不启用 Oracle SSL/TLS 加密,必须手动配置 OCI 环境并勾选 SSL 选项,否则“安全连接”形同虚设。
为什么测试连接成功但实际未加密?
Navicat 的“测试连接”仅验证网络连通性与认证通过,SSL 开关默认关闭,且不校验证书有效性。即使你填了 SSL 相关字段,若未在 OCI 层启用或路径错误,底层仍走明文 TCP。
- 常见误判:看到“连接测试成功”就认为 SSL 已生效
- 根本原因:Navicat 的 Oracle 连接依赖 Oracle Instant Client 的
oci.dll,而该 DLL 是否加载 SSL 支持,取决于其版本与编译选项(如是否含orannzsbb19.dll) - 64 位 Navicat 必须配 64 位 Instant Client,混用会导致
Oracle library is not loaded错误,SSL 更无从谈起
启用 SSL 前必须确认的 OCI 环境
Navicat 17 不自带 Oracle 加密库,所有 SSL 能力来自 Instant Client。你得先确保它具备 TLS 支持:
- 下载
Oracle Instant Client Basic和SDK(非仅 Basic Lite),版本建议 ≥ 21c(v21.10+),因旧版默认禁用 TLS 1.2+ - 解压后检查目录是否存在
orannzsbb19.dll(19c/21c)或orannzsbb21.dll(23c)——这是 SSL 核心模块,缺一则无法启用加密 - 在 Navicat 中:「工具」→「选项」→「环境」→「OCI 环境」→ 浏览到该目录下的
oci.dll,**不是**oraocci19.dll或其他文件 - 若用 TNSNAMES.ORA 方式连接,还需把
sqlnet.ora放入同一目录,并确保含:SQLNET.ENCRYPTION_SERVER = required SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
在新建 Oracle 连接中正确启用 SSL
OCI 环境配好只是前提,连接层必须显式开启且参数匹配,否则仍降级为非加密连接:
- 新建连接时,切换到「高级」选项卡 → 勾选
Use SSL -
SSL Mode推荐选Verify CA(而非Preferred或Require),否则易因证书链缺失直接失败 -
SSL Certificate Authority:指向你的根证书 PEM 文件(如ca-bundle.crt),不可为空;若用自签名证书,必须填且路径不能含中文或空格 -
SSL Certificate和SSL Key:仅客户端双向认证才需填,普通服务端认证可留空 - 服务名字段必须填
service_name(非 SID),因为 SSL 握手在 Oracle 12c+ 后强制要求 service_name 模式
验证 SSL 是否真实生效
不能只信 Navicat 界面提示。最简验证方式是抓包或查会话属性:
- 用 Wireshark 抓本地回环流量,过滤
tcp.port == 1521,若看到明文SELECT或用户名,说明 SSL 未启用 - 连接成功后,在 Navicat 查询窗口执行:
SELECT sys_context('USERENV', 'NETWORK_PROTOCOL') FROM DUAL;返回值应为tcps(不是tcp) - 执行:
SELECT * FROM V$SESSION_CONNECT_INFO WHERE SID = (SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1);
查看NETWORK_SERVICE_BANNER字段是否含Encryption service和TLS - 若返回
ORA-28765: SSL handshake failed,大概率是证书路径错、orannzsbb*.dll缺失,或服务端未配置监听器 SSL 支持(listener.ora中需有SSL_CLIENT_AUTHENTICATION=FALSE等)
真正难的不是点勾选框,而是让 oci.dll、orannzsbb*.dll、sqlnet.ora、服务端监听器、证书格式这五者对齐。漏掉任一环,Navicat 都会静默降级——它不会报错,只会连上一个你以为加密了的明文通道。


















