Oracle Wallet必须用orapki创建并注入完整证书链,不能用OpenSSL文件直传;监听器需在listener.ora中显式配置TCPS协议地址,且sqlnet.ora中WALLET_LOCATION须为绝对路径、服务端客户端均需配置一致,否则连接将降级走TCP并报ORA-29024。

Wallet必须用orapki创建,不能用OpenSSL文件直传
Oracle .NET驱动(ODP.NET)不认OpenSSL生成的server.crt或ca.pem,也不接受手动拼接的证书文件。Wallet是二进制容器,必须用orapki初始化并注入证书链,否则连接时直接报ORA-29024: Certificate validation failure。
常见错误包括:
- 跳过
-auto_login参数,导致监听器或客户端无法自动加载Wallet - Wallet目录权限设为755,应严格设为
700且属主为oracle用户 - 路径含空格或中文,但
listener.ora里没加双引号,监听器静默忽略TCPS配置
sqlnet.ora里WALLET_LOCATION必须绝对路径且服务端/客户端一致
WALLET_LOCATION不是可选配置,而是ODP.NET和监听器定位证书的唯一依据。它不读环境变量,不能写$ORACLE_HOME或~,必须写死绝对路径。
关键点:
- 监听器读的是
$ORACLE_HOME/network/admin/sqlnet.ora,不是实例目录下的那个 - 客户端和服务器端都要配,缺一不可;只配客户端,服务端仍走明文TCP
-
SSL_VERSION = 1.2必须写在这里,URL里设oracle.net.ssl_version已被废弃,会被忽略
正确写法示例:
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/admin/ORCL/wallet)))
listener.ora必须定义TCPS地址,且lsnrctl status能看见TCPS行
仅改sqlnet.ora完全无效。监听器必须真正监听TCPS协议,否则ODP.NET连接时根本不会触发证书校验,静默降级走TCP。
配置要点:
- 在
listener.ora中新增(PROTOCOL = TCPS)段,端口别和现有TCP冲突(如用2484) - ADDRESS里
HOST必须能被解析,建议用FQDN而非localhost - 启动后运行
lsnrctl status,输出里必须有TCPS字样,没有说明配置未加载(常见是括号不匹配或缩进错)
.NET连接字符串必须用TCPS协议,且启用DN匹配
ODP.NET连接字符串里协议必须是tcps://,不能是tcp://;同时必须显式设oracle.net.ssl_server_dn_match=true,否则证书CN校验失败。
典型连接字符串(适用于ODP.NET Managed Driver):
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=mydb.example.com)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=ORCL)));User Id=myuser;Password=mypass;SSL Server Certificate DN Match=true;
注意:SSL Server Certificate DN Match是布尔值,不是字符串;设成"true"会报错。
容易被忽略的点:Wallet里必须同时包含server证书和CA证书,并执行orapki wallet add_trusted_cert标记CA为可信——否则哪怕连接字符串全对,也卡在证书链验证环节。


















