只有在禁用SSL验证时才能从API获得响应,正在尝试将API消耗到ABAP中

nle07wnf  于 2023-04-06  发布在  其他
关注(0)|答案(4)|浏览(571)

**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_REFUSED(-10)
到目前为止,我已经尝试了以下方法:

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

HTTP失败、处理失败、无效状态、无效超时或其他错误调用EXECUTE_CC_FLOW时出错。
我对Basis的了解很少,所以我不确定我是否正确地完成了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,但这不起作用。

1cosmwyk

1cosmwyk1#

这两个错误NIECONN_REFUSED和NIEHOST_UNKNOWN都与SSL无关。
对于NIECONN_REFUSED,请基础检查api-eu.ariba.com端口443上的www.example.com是否可以从SAP服务器访问。可能他们必须在防火墙中打开端口,或者您必须使用代理。
NIEHOST_UNKNOWN是由于错误的SM59设置。它应该如下所示

https://api-eu.ariba.com错误

你就能得到

证书颁发为SSSLERR_PEER_CERT_UNTRUSTED

i2loujxw

i2loujxw2#

看起来你已经走了大半了。
a)ariba.comTRUST中的TRUST www.example.com。
使用Web浏览器转到站点,单击挂锁并下载他们的证书。x1c 0d1x

T-Code STRUST导入证书。将其应用于CLIENT SSL Anon和Standard PSE部分。
但是NIEHOST错误与SSL区域不同。所以你还应该检查DNS,看看SAP系统是否能到达那个url。
有时候你需要在TCode SICF中配置一个CLIENT代理。如果你的组织使用代理进行外部HTTP连接,那么必须在SICF客户端代理设置中进行配置。

q8l4jmvw

q8l4jmvw3#

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

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

谢谢你的建议!Test Connection OK

4jb9z9bj

4jb9z9bj4#

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

相关问题