使用 Oracle.ManagedDataAccess ≥ 8.25.1(推荐 23.11.0),配合 TLS 1.2+、正确配置的 wallet 及显式 SSL_SERVER_CERT_DN,才能建立安全 OCI 连接;旧驱动、硬编码连接串或绕过证书验证将导致 ORA-28763 错误。
直接用 oracle.manageddataaccess 8.25.1+ 版本,配合 tls 1.2+ 和正确配置的 wallet,就能建立安全连接;旧版本或硬编码连接字符串容易漏掉证书验证或加密协商环节。
确认 Oracle .NET 驱动支持 OCI 连接的安全模式
OCI 数据库默认启用 TLS 1.2+,且要求客户端验证服务器证书。.NET 8 应用必须使用 Oracle.ManagedDataAccess ≥ 8.25.1(2024 年后发布),否则会因缺少 SSL_SERVER_CERT_DN 支持或 TLS 握手失败而报错 ORA-28763: unable to establish secure connection。
- 不推荐用
Oracle.DataAccess(已弃用)或早期Oracle.ManagedDataAccess(如 19.x 或更早) - 通过 NuGet 安装时明确指定版本:
dotnet add package Oracle.ManagedDataAccess --version 23.11.0(当前最新稳定版) - 若项目含
System.Data.OracleClient(.NET Framework 旧组件),必须彻底移除——它不支持 OCI wallet 或现代 TLS
配置 wallet 路径与连接字符串中的关键参数
wallet 是 OCI 数据库强制要求的身份与证书载体,不能省略;仅靠用户名密码 + SSL 加密参数无法通过认证。
- wallet 解压后必须包含
cwallet.sso、ewallet.p12、truststore.jks等文件,且路径需对应用进程可读 - 连接字符串中必须显式设置:
DATA SOURCE=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=adb.region.oraclecloud.com)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=xxxxxx_adb_high.adwc.oraclecloud.com))(SECURITY=(SSL_SERVER_CERT_DN=\"CN=adwc,OU=Oracle ADB,O=Oracle Corporation,L=Redwood City,ST=California,C=US\")) -
Wallet Location不应写死在连接字符串里,而是通过环境变量或配置项传入:OracleConfiguration.WalletLocation = "/path/to/wallet"; - 若 wallet 中的
sqlnet.ora含SSL_VERSION = 1.2,.NET 8 默认会遵循;但若该文件缺失或值为0,需在连接字符串加SSLVERSION=1.2
避免在开发/测试环境绕过证书验证
本地调试时有人会设 SSL_SERVER_DN_MATCH=no 或 TrustStore=None 来跳过验证,这在部署到生产前极易被遗漏,导致运行时报 ORA-28763 或静默连接降级。
- 开发阶段也应使用真实 wallet,并确保
SSL_SERVER_CERT_DN值与 wallet 内证书一致(可通过openssl x509 -in certificates.pem -text -noout | grep "Subject:"检查) - 不要在
appsettings.json中条件化开关验证逻辑;不同环境共用同一套 wallet + 连接字符串更安全 - .NET 8 的
OracleConnection.OpenAsync()在证书校验失败时抛出OracleException,错误信息含 “certificate chain” 字样,不是网络超时
wallet 文件权限、SSL_SERVER_CERT_DN 大小写敏感、以及 OracleConfiguration.WalletLocation 是否在 OracleConnection 实例化前设置——这三个点最容易在 CI/CD 流水线中失效,建议写个最小验证脚本在容器启动时执行一次连接探测。


















