如何在if_http_client ABAP消费者中绕过SSL身份验证?

igsr9ssn  于 2023-10-19  发布在  其他
关注(0)|答案(3)|浏览(226)

**TLDR:**基本上,我的问题是,类if_http_client或任何ABAP类上是否有任何方法可以关闭SSL验证?因为它似乎只有在禁用时才能工作。如果没有,那么我如何绕过这个错误?
详细描述

我能够使用Postman接收响应,但当尝试在ABAP上编码时,我无法获得响应。我想从api-eu.ariba.com接收令牌。以下是我对Postman的评论:

当我在Postman上尝试这些输入时,我只能在禁用SSL验证时得到响应**。我也在Python中测试过这个,因为在请求中有一个参数可以禁用SSL验证,并能够获得相同的响应。但是当我在ABAP上尝试这个(使用**if_http_client**)时,这就是我在接收响应时收到HTTP通信错误的地方。
直接连接到api-eu.ariba.com:443失败:NIECONN_拒绝(-10)
到目前为止,我已经尝试了以下方法:

  • 将SAP Ariba EU(RSA)公共证书安装到STRUST
  • 尝试从OA2C_CONFIG添加OAUTH配置文件(我不确定我是否正确配置)。尝试设置令牌,但出现错误:

HTTP失败、处理失败、无效状态、无效超时或其他错误调用EXECUTE_CC_FLOW时出错。
我对基础知识知之甚少,所以我不确定我是否正确地编写了OA2C_CONFIG,也不知道ABAP REST API相关的类。

ABAP代码片段:

*Creation of New IF_HTTP_Client Object
  CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url                = lv_endpoint
      ssl_id             = 'ANONYM'
    IMPORTING
      client             = lo_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4.

IF sy-subrc IS NOT INITIAL.
* Handle errors
ENDIF.

lo_client->propertytype_logon_popup = 0.
*lo_client->request->set_method( if_http_request=>co_request_method_post ).

CALL METHOD lo_client->request->set_method( 'POST' ).
lo_client->request->set_header_field( name = 'Authorization' value =  lv_auth ).
lo_client->request->set_header_field( name = 'Content-Type' value = lv_contyp ).
lo_client->request->set_form_field( name  = 'grant_type' value = lv_grantype ).

lo_client->send( ).
IF sy-subrc IS NOT INITIAL.
* Handle errors
ENDIF.

CALL METHOD lo_client->receive
  EXCEPTIONS
    http_communication_failure = 1
    http_invalid_state         = 2
    http_processing_failed     = 3
    OTHERS                     = 4.
IF sy-subrc IS NOT INITIAL.
  lo_client->get_last_error(
    IMPORTING
    message = lv_response  ).
  WRITE: / lv_response.
  IF sy-subrc = 0.

  ENDIF.

ENDIF.

编辑:能够在类上找到一个参数:

CL_HTTP_CLIENT->CREATE_BY_URL

名为DO_NOT_USE_CLIENT_CERT,默认为abap_false。将值更改为abap_true,但这不起作用。

jhkqcmku

jhkqcmku1#

看起来你已经差不多了
a)在STRUST中TRUSTariba.com。
使用网络浏览器去网站,点击挂锁并下载他们的证书。

T-Code STRUST导入证书。将其应用于CLIENT SSL Anon和标准PSE部分。
但是NIEHOST错误与SSL区域不同。因此,您还应该检查DNS以及SAP系统是否可以访问该URL。
有时你需要在TCode SICF中配置一个CLIENT代理。如果您的组织使用代理进行外部HTTP连接,则必须在SICF客户端代理设置中进行配置。

mwkjh3gx

mwkjh3gx2#

我们现在可以通过SM 59连接。

  • 基础上增加了代理主机和服务。
  • 添加路径前缀:'/v2/oauth/token'
  • 使用目的地并从ABAP端使用cl_http_client=>create_by_destination连接到Ariba并传递参数。
  • 这种情况下不需要OAUTH配置文件。

谢谢你的建议!Test Connection OK

kxkpmulp

kxkpmulp3#

我检查了api-eu.ariba.com SSL,它看起来有效。可能您的日期/时间不正确或根证书丢失。
您可以在t代码SMICM处启用ICM跟踪。在SM 59创建测试连接,然后单击测试连接按钮。然后检查ICM日志。您将在日志中获得更多详细信息。
您需要为SAP配置TLS版本和握手方法。也许你的SAP只接受TLS 1.3,因为安全原因,但端点不支持它。

相关问题