使用 Oracle APEX 对自签名、未经认证的网站进行 REST 调用

Posted

技术标签:

【中文标题】使用 Oracle APEX 对自签名、未经认证的网站进行 REST 调用【英文标题】:REST calls to a self-signed,not certified website using Oracle APEX 【发布时间】:2016-08-18 08:55:37 【问题描述】:

我正在尝试通过执行 PL/SQL 代码,使用 APEX 将一些数据发布到网站。

问题是,网站的证书是自签名的,所以没有正确认证,我收到以下错误:

ORA-29273:HTTP 请求失败 ORA-06512:在“SYS.UTL_HTTP”,第 1130 行 ORA-28860: 致命的 SSL 错误

我正在使用以下代码:

过程 publish_error_tickets

 req utl_http.req;
 res utl_http.resp;
 url varchar2(4000) := 'https://some_url';
 name varchar2(4000);
 buffer varchar2(4000); 
 content varchar2(4000) := 
 '
 "issue": 
   "project_id": 1,
   "subject": "Example",
   "priority_id": 4
   
 ';    begin

 req := utl_http.begin_request(url, 'POST',' HTTP/1.1');
 utl_http.set_header(req, 'user-agent', 'mozilla/4.0'); 
 utl_http.set_header(req, 'content-type', 'application/json'); 
 utl_http.set_header(req, 'Content-Length', length(content));

 utl_http.write_text(req, content);
 res := utl_http.get_response(req);
 begin
   loop
     utl_http.read_line(res, buffer);
     dbms_output.put_line(buffer);
   end loop;

   utl_http.end_response(res);
 exception
   when utl_http.end_of_body 
   then
     utl_http.end_response(res);
 end;    end;

我的问题是,是否可以以某种方式忽略 http 消息的证书验证过程?必须有一种无需为网站购买经过验证的证书即可访问网站的方法。

提前致谢, 塔马斯

【问题讨论】:

要通过 SSL 使用 utl_htttp 连接到任何东西,您必须将证书添加到您的 Oracle 钱包并调用 utl_http.set_wallet。 是的,我已经知道了,但问题是服务器在 Oracle XE 上运行,所以我们无法访问 oracle 钱包,这就是为什么我问是否可以绕过整个 ssl 握手,就像在 java 中一样。虽然 Oracle XE 有一个解决方法,但如果它可以在没有钱包的情况下完成,我们想先尝试一下。 是的,有。我也使用 XE,并使用 Apache 反向代理,以便 Oracle 可以通过 http 连接。欲了解更多信息,请参阅:blog.rhjmartens.nl/2015/07/… 太棒了,成功了,感谢您的提示! 【参考方案1】:

对于任何有同样问题的人,我使用 Jeffrey Kemp 发布的解决方案 (http://blog.rhjmartens.nl/2015/07/making-https-webservice-requests-from.html) 使用反向代理,它就像一个魅力!

【讨论】:

以上是关于使用 Oracle APEX 对自签名、未经认证的网站进行 REST 调用的主要内容,如果未能解决你的问题,请参考以下文章

在交互式网格 Oracle Apex 中的自定义验证中突出显示列

APEX 18.1.0.00.41中的图表显示标签名称为“group xx”

企业为啥不能使用自签名SSL证书?

旧版SpringSecurity和JWT实现认证和授权

如何仅使用 sql 在 apex oracle 的交互式网格中实现选择列表以及 oracle APEX 中可用的内容?

如何使用 APEX 函数编译 Oracle 包?