Oracle APEX自治数据库调用HTTPS服务遇ORA-29024证书验证失败
问题排查与解决方案
针对你遇到的ORA-29273及证书、权限相关问题,按以下方向逐一排查:
1. 验证datos.gov.co的证书链完整性
虽然你解决了谷歌的证书问题,但datos.gov.co可能使用了不同的CA证书或中间证书未被数据库信任:
- 先获取目标站点的证书信息:
SELECT UTL_HTTP.GET_CERTIFICATE('https://www.datos.gov.co') FROM DUAL; - 检查自治数据库的钱包中是否包含该证书对应的根CA和中间证书。如果缺失,将证书导出后通过DBMS_WALLET或OCI控制台导入到数据库钱包中。
2. 区分APEX与UTL_HTTP的执行上下文差异
apex_web_service.make_rest_request默认使用APEX实例级钱包,而UTL_HTTP.REQUEST使用数据库级钱包,两者的信任证书集合可能不一致:- 登录APEX工作区,进入「实例设置」→「安全」,确认「REST Services Wallet」已正确配置,且包含
datos.gov.co所需的证书链。
- 登录APEX工作区,进入「实例设置」→「安全」,确认「REST Services Wallet」已正确配置,且包含
- 关于
APEX_APPLICATION.g_flow_schema_owner:需在调用UTL_HTTP前明确赋值,且该用户需具备EXECUTE UTL_HTTP权限、钱包访问权限,以及对应主机的ACL权限。
3. 捕获ORA-29273的详细错误信息
直接捕获异常细节,定位具体失败原因:
DECLARE l_response CLOB; l_error_detail VARCHAR2(4000); BEGIN l_response := apex_web_service.make_rest_request( p_url => 'https://www.datos.gov.co', p_http_method => 'GET' ); EXCEPTION WHEN OTHERS THEN l_error_detail := SQLERRM || CHR(10) || DBMS_UTILITY.FORMAT_ERROR_STACK; DBMS_OUTPUT.PUT_LINE(l_error_detail); END; /
根据输出的子错误码(比如证书不匹配、主机名验证失败等)针对性修复。
4. 复查主机ACL配置细节
- 确认
DBA_HOST_ACLS中已添加www.datos.gov.co的完整主机名(避免通配符或部分域名):SELECT host, lower_port, upper_port FROM DBA_HOST_ACLS WHERE host = 'www.datos.gov.co'; - 检查
DBA_HOST_ACES中是否给APEX解析用户(通常是APEX_PUBLIC_USER)及你的业务schema用户授予了CONNECT权限,且权限未过期。
内容的提问来源于stack exchange,提问作者Edisson Gabriel López
相关产品推荐
相关产品推荐

