【问题标题】:ORA-29024: Certificate validation failure - Apex and HTTPSORA-29024: 证书验证失败 - Apex 和 HTTPS
【发布时间】:2020-11-01 04:48:29
【问题描述】:

让我解释一下发生了什么:

  • 数据库:Oracle 19c
  • 顶点:19.1.0.00.15
  • ORDS 独立是 19.1.0.r0921545

我完成了将 Apex 社交登录配置到 Microsoft AAD 的任务,几乎没有任何问题:

  • 我在 Apex 中创建了身份验证方法。
  • 我在 Azure 中注册了我的应用程序并获取了 Web 凭据。
  • 我使用根 CA Microsoft 证书在我的数据库中创建了一个钱包,并配置了实例设置以使用该钱包。
  • 我在数据库服务器中的钱包包含属性 auto_login 以避免使用密码。
  • 我创建了 ACE 条目以允许连接到端口 443 中的 login.microsoftonline.com
  • 尽管对于问题本身的目的和产生的错误而言并不重要,但请评论我在内部工作区中配置了钱包设置,以便为 apex 应用程序提供对钱包的访问。

几个星期以来,这个过程运行良好,我在不同的工作区中为我的所有 apex 应用程序提供了一个完美的 Single Sing on 机制。但是,从几天前开始,我总是遇到同样的错误:

ORA-29024:证书验证失败

经过一番挖掘,我意识到有人为传出流量配置了代理。在尝试使用 Apex 之前,我使用 APEX_WEB_SERVICE 尝试了 SQL

使用代理设置请求 login.microsoftonline.com

select apex_web_service.make_rest_request(
    p_url         => 'https://login.microsoftonline.com',
    p_http_method => 'GET',
    p_wallet_path => 'file:/home/oracle/wallet',
    p_wallet_pwd => 'MyPassword' ,
    p_proxy_override => 'http://myproxy:myport'
  7  ) from dual;
ERROR:
ORA-29273: HTTP request failed
ORA-06512: at "APEX_190100.WWV_FLOW_WEB_SERVICES", line 1035
ORA-29024: Certificate validation failure
ORA-06512: at "SYS.UTL_HTTP", line 380
ORA-06512: at "SYS.UTL_HTTP", line 1148
ORA-06512: at "APEX_190100.WWV_FLOW_WEB_SERVICES", line 934
ORA-06512: at "APEX_190100.WWV_FLOW_WEB_SERVICES", line 1580
ORA-06512: at "APEX_190100.WWV_FLOW_WEBSERVICES_API", line 408
ORA-06512: at line 1

请求没有代理设置,只是看看我能不能到达那里

SQL> select apex_web_service.make_rest_request(
  2      p_url         => 'https://login.microsoftonline.com',
  3      p_http_method => 'GET',
  4      p_wallet_path => 'file:/home/oracle/wallet'
  5* ) from dual
SQL> /
ERROR:
ORA-29273: HTTP request failed
ORA-06512: at "APEX_190100.WWV_FLOW_WEB_SERVICES", line 1035
ORA-29024: Certificate validation failure
ORA-06512: at "SYS.UTL_HTTP", line 380
ORA-06512: at "SYS.UTL_HTTP", line 1148
ORA-06512: at "APEX_190100.WWV_FLOW_WEB_SERVICES", line 934
ORA-06512: at "APEX_190100.WWV_FLOW_WEB_SERVICES", line 1580
ORA-06512: at "APEX_190100.WWV_FLOW_WEBSERVICES_API", line 408
ORA-06512: at line 1

使用代理设置请求谷歌

select apex_web_service.make_rest_request(
    p_url         => 'https://google.com',
    p_http_method => 'GET',
    p_wallet_path => 'file:/home/oracle/wallet',
    p_wallet_pwd => 'MyPassword' ,
  6      p_proxy_override => 'http://myproxy:myport'
  7  ) from dual ;
ERROR:
ORA-29273: HTTP request failed
ORA-06512: at "APEX_190100.WWV_FLOW_WEB_SERVICES", line 1035
ORA-29024: Certificate validation failure
ORA-06512: at "SYS.UTL_HTTP", line 380
ORA-06512: at "SYS.UTL_HTTP", line 1148
ORA-06512: at "APEX_190100.WWV_FLOW_WEB_SERVICES", line 934
ORA-06512: at "APEX_190100.WWV_FLOW_WEB_SERVICES", line 1580
ORA-06512: at "APEX_190100.WWV_FLOW_WEBSERVICES_API", line 408
ORA-06512: at line 1

在没有代理设置的情况下向 google 请求

SQL> select apex_web_service.make_rest_request(
  2      p_url         => 'https://google.com',
  3      p_http_method => 'GET',
  4      p_wallet_path => 'file:/home/oracle/wallet'
  5* ) from dual
SQL> /
ERROR:
ORA-29273: HTTP request failed
ORA-06512: at "APEX_190100.WWV_FLOW_WEB_SERVICES", line 1035
ORA-12535: TNS:operation timed out
ORA-06512: at "SYS.UTL_HTTP", line 380
ORA-06512: at "SYS.UTL_HTTP", line 1148
ORA-06512: at "APEX_190100.WWV_FLOW_WEB_SERVICES", line 934
ORA-06512: at "APEX_190100.WWV_FLOW_WEB_SERVICES", line 1580
ORA-06512: at "APEX_190100.WWV_FLOW_WEBSERVICES_API", line 408
ORA-06512: at line 1

我的问题如下:

  • 这是关于入站/出站的网络问题或代理问题 交通 ?当我不指定代理时,我可以在端口 443 中访问 Microsoft,但不能访问 Google。
  • 为什么我得到无效的证书,而它与它无关 证书?
  • 如何设置我的 APEX 以在 Azure 或任何其他设备上使用身份验证 当我在中间有代理时,提供者?
  • 当我单独使用 ORDS 时,我是否允许继续使用它,或者我需要一个 使用 Tomcat 的反向代理?

我尝试通过运行将 ACE 配置为在端口中使用 HTTP_PROXY

begin
  sys.dbms_network_acl_admin.append_host_ace(
    host        => 'myproxyserver'
   ,lower_port  => 8080
   ,upper_port  => 8080
   ,ace         => xs$ace_type(
      privilege_list     => xs$name_list('http_proxy')
     ,granted            => true
     ,principal_name     => 'MY_PRINCIPAL'
     ,principal_type     => XS_ACL.PTYPE_DB
    )
  );
end;
/

即使我授予 ACE 对钱包的特权

SET SERVEROUTPUT ON
BEGIN
  DBMS_NETWORK_ACL_ADMIN.APPEND_WALLET_ACE
  (
    WALLET_PATH => 'file:/home/oracle/wallet',
    ACE => XS$ACE_TYPE(
                        PRIVILEGE_LIST => XS$NAME_LIST('use_passwords','use_client_certificates'),
                        PRINCIPAL_NAME => 'MY_PRINCIPAL',
                        PRINCIPAL_TYPE => XS_ACL.PTYPE_DB
                      )
  );
EXCEPTION WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE('Error while configuring ACL for wallet: '|| SQLERRM);
END;
/

但我仍然遇到同样的错误。

任何帮助将不胜感激! 谢谢

【问题讨论】:

    标签: oracle oracle-apex


    【解决方案1】:

    据我了解,您需要做以下事情(除了您所做的):

    1. 以管理员身份登录 Apex
    2. 从设置中转到“钱包”
    3. 添加钱包路径(带有前缀“file://”和您用于创建钱包的密码的绝对路径

    现在,你的问题应该解决了。

    【讨论】:

    • 嗨@Shashi,这不是问题。 APEX 设置在一开始就完成了。
    • 此外,您可以在没有图形界面的情况下使用 APEX_WEB_SERVICE。
    • @RobertoHernandez 感谢您的澄清,由于您没有提到钱包设置,我认为它没有完成。 :-)
    【解决方案2】:

    我遇到了这样的问题,Oracle SSL 库似乎有一些错误。最后我为 OJVM 实现了一些 Java 源代码,请在此处阅读我的答案:https://stackoverflow.com/a/60152830/11272044

    【讨论】:

    • java 代码如何知道证书在哪里?使用 APEX_WEB_SERVICE 的目的是我可以告诉 Oracle 我的证书存储在哪里。
    • Java 有默认的密钥库。但是你可以添加你自己的。 System.setProperty("javax.net.ssl.trustStore", "/tmp/cacerts.jks"); System.setProperty("javax.net.ssl.trustStorePassword", "changeit");也可以使用 DBMS_JAVA 包设置
    【解决方案3】:

    感谢所有发布答案的人,但最终,经过一段时间的努力,我找到了根本原因。事实上,Oracle 是正确的,因为微软已经改变了身份验证的处理方式,当你使用 Office365 和 Azure Active Directory 时,你使用的是 Oauth2 或 OpenID。

    在这种情况下,我的组织正在使用 Office 365,并且一开始从以下位置导入 PKI 证书就足够了:

    https://www.microsoft.com/pki/mscorp/cps/default.htm

    在 Azure Active Directory (AAD) 中完成更改后,您现在还需要来自 office.com 的全局签名证书

    我希望它向其他遇到相同问题的用户澄清,尝试使用 Apex Social 登录对 Azure Active Directory 进行身份验证。

    您可以直接从office365.com下载证书

    将新的两个证书添加到钱包后,您现在可以毫无问题地进入:

    select apex_web_service.make_rest_request(
        p_url         => 'https://login.microsoftonline.com',
        p_http_method => 'GET',
      4      p_wallet_path => 'file:/home/oracle/wallet' ) from dual ;
    
    APEX_WEB_SERVICE.MAKE_REST_REQUEST(P_URL=>'HTTPS://LOGIN.MICROSOFTONLINE.COM',P_
    --------------------------------------------------------------------------------
    
    
    <!-- Copyright (C) Microsoft Corporation. All rights reserved. -->
    <!DOCTYP
    
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      • 2021-12-27
      • 2014-09-24
      • 2019-04-20
      • 2012-03-15
      • 2011-09-17
      • 1970-01-01
      相关资源
      最近更新 更多