使用UTL_HTTP访问HTTPS站点遇证书验证失败问题求助
问题:Oracle UTL_HTTPS请求遇证书验证失败(ORA-29024)
执行HTTPS请求时触发以下错误:
ORA-29273: HTTP request failed ORA-29024: Certificate validation failure ORA-06512: at "SYS.UTL_HTTP"
已将目标站点证书导入钱包,Oracle PKI工具输出如下:
Oracle PKI Tool Release 19.0.0.0.0 - Production Version 19.3.0.0.0 Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved. Requested Certificates: Subject: C=UA,ST=ua,L=kyiv,O=test,OU=test,CN=test User Certificates: Trusted Certificates: Subject: CN=extremstyle.ua
执行的PL/SQL代码块:
declare req utl_http.req; resp utl_http.resp; begin utl_http.set_wallet('file:C:\OracleSoftware\admin\db1\dpdump', '*******'); -- 此处为真实密码 req := utl_http.begin_request('https://extremstyle.ua/'); utl_http.set_header(req, 'User-Agent', 'Mozilla/4.0'); resp := utl_http.get_response(req); utl_http.end_response(resp); end; /
请问还需检查哪些内容或执行什么操作?
排查与解决建议
- 检查证书链完整性:仅导入站点证书可能不够,需确认是否导入了完整的证书链(包括中间CA证书)。多数HTTPS站点证书由中间CA签发,Oracle钱包需信任整个链上的证书才能完成验证。可通过浏览器访问目标站点,导出完整证书链后导入钱包。
- 验证钱包路径权限:确保Oracle数据库进程对
file:C:\OracleSoftware\admin\db1\dpdump路径有读取权限。Windows环境下需检查该文件夹的NTFS权限,给Oracle服务账号分配读权限。 - 确认证书有效期:检查导入的
CN=extremstyle.ua证书是否过期,同时确保数据库服务器系统时间在证书有效期范围内。 - 核对主机名匹配:查看证书的Subject Alternative Name(SAN)字段,确认是否包含
extremstyle.ua。部分证书可能仅包含www子域名,访问裸域名会触发主机名验证失败。 - 测试钱包可用性:使用
utl_http.test_wallet函数测试钱包能否正常加载信任证书:declare v_result boolean; begin v_result := utl_http.test_wallet('file:C:\OracleSoftware\admin\db1\dpdump', '你的钱包密码'); dbms_output.put_line('Wallet test result: ' || case when v_result then 'SUCCESS' else 'FAILED' end); end; / - 调整UTL_HTTP验证参数:可临时关闭主机名验证用于排查(生产环境不建议长期使用),添加以下代码到PL/SQL块中:
utl_http.set_hostname_check(false); - 确认钱包类型:确保创建的是标准PKCS#12钱包,而非仅包含用户证书的钱包。可通过Oracle Wallet Manager打开钱包,确认信任证书列表完整。
内容的提问来源于stack exchange,提问作者Dmytro
相关产品推荐
相关产品推荐

