oracle data guard本身不直接管理ssl/tls证书,而是依赖数据库服务器、oracle net services(sqlnet.ora)、监听器或云平台等组件的证书;常见过期位置包括主备库wallet中的tls证书、监听器/em express绑定的https证书,或oci负载均衡器等云侧证书,需先定位具体失效组件再针对性更换。

Oracle Data Guard 本身不直接管理 SSL/TLS 证书;它依赖底层数据库服务器(如 Oracle Database)和传输层(如 Oracle Net Services / sqlnet.ora)的加密配置。如果你看到 “Oracle Data Guard SSL证书过期” 报错或连接失败,实际是以下某处的证书失效了:
- 主库或备库的 Oracle Wallet 中存放的 TLS 证书(用于
SSL加密的sqlnet.ora配置) - Data Guard Broker 使用的监听器(
listener.ora)所绑定的 HTTPS 管理端口证书(如 EM Express 或 Broker CLI over HTTPS) - 云环境(如 OCI、Exadata Cloud@Customer)中由平台托管的负载均衡器或代理层使用的证书(非数据库侧,但影响 DG 连接链路)
所以,不是“Data Guard 有独立证书”,而是它运行依赖的 TLS 组件证书过期了。更换动作必须落在具体证书持有者上。
确认哪个组件的证书过期了
先定位问题来源,避免盲目替换:
- 检查主/备库的
sqlnet.ora是否启用 SSL:SSL_SERVER_DN_MATCH=yes、SSL_CLIENT_AUTHENTICATION=TRUE等配置存在 → 重点查 Oracle Wallet(orapki wallet)里的证书有效期 - 用
openssl s_client -connect host:port -showcerts测试监听器端口(如 1522、5500)是否返回过期证书 → 若返回,说明是监听器或 EM Express 的证书问题 - 在 OCI 控制台查看 Data Guard 组关联的 Load Balancer 或 Gateway 服务 → 若使用云厂商 TLS 终结,证书在云控制台管理,与数据库无关
- 查看告警日志:
ALERT.LOG中出现ORA-29024: Certificate validation failure或TNS-00507: SSL Handshake failed→ 明确指向 Oracle Net 层证书校验失败
更换 Oracle Wallet 中的 SSL 证书(最常见场景)
这是 Data Guard 启用加密传输时最常出问题的位置。Wallet 里包含信任证书(cwallet.sso)、用户证书和私钥,其中任一过期都会中断加密连接。
- 不要直接修改现有 wallet,用
orapki wallet create新建一个空 wallet,再导入新证书链 - 确保新证书满足 Oracle 要求:RSA 密钥 ≥ 2048 位,SHA-256 签名,有效期 ≤ 199 天(CA/B Forum 2026 年新规强制)
- 导入顺序必须为:根 CA → 中间 CA → 本机证书(
orapki wallet add_cert),否则验证失败 - 更新
sqlnet.ora指向新 wallet 路径:WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/admin/wallet_new))) - 重启监听器和数据库实例(仅 listener 重启不足以刷新 wallet 缓存,必须 restart database)
更换监听器或 EM Express 的 HTTPS 证书
如果 Data Guard Broker CLI 或 EM Express 页面提示证书错误(如浏览器显示 NET::ERR_CERT_EXPIRED),问题不在 wallet,而在监听器绑定的 HTTPS 服务。
- 监听器证书由
ssl.ora或listener.ora中的SSL_CIPHER_SUITES和证书路径控制,但 Oracle 不提供图形化更新入口 - 标准做法:用
orapki wallet创建含新证书的 wallet,再在listener.ora中指定该 wallet 路径,并设置SSL_CLIENT_AUTHENTICATION=FALSE(仅加密,不认证)以简化流程 - EM Express 默认复用监听器证书;若单独配置 HTTPS 端口(如
DBExpress),需通过DBMS_XDB_CONFIG.SETHTTPSPORT重新绑定,但证书仍来自 wallet - 注意:重启监听器后,执行
lsnrctl reload不生效,必须lsnrctl stop && lsnrctl start
云环境(OCI / Exadata Cloud@Customer)中的证书归属
如果你用的是 Oracle Cloud Infrastructure 的 Data Guard 组(Oracle Data Guard Group),那么 TLS 终结很可能发生在 Load Balancer 或 Service Gateway 层 —— 此时数据库本身未启用 SSL,证书完全由云平台管理。
- 登录 OCI 控制台 → 进入对应 Load Balancer → 查看 “SSL Certificates” 标签页 → 替换证书(支持 PEM 格式上传)
- 证书替换后无需重启 DB,但需等待 LB 配置同步(通常 1–2 分钟),旧连接会自然断开重连
- 不能在数据库侧执行任何 wallet 操作,否则可能与 LB 的明文转发策略冲突
- 检查 Data Guard 组状态是否变为
UPDATING或INVALID_CERTIFICATE,这是 OCI 对证书异常的明确标识
真正麻烦的不是换证书,而是搞不清证书到底属于哪一层 —— 数据库 wallet?监听器?EM Express?还是云 LB?一旦选错位置,换十次也没用。尤其在混合部署(本地主库 + 云备库)场景下,两边证书策略可能不同步,必须分别验证。











