**TLDR:**基本上我的问题是if_http_client
类或者ABAP类上有没有什么方法可以关闭SSL验证?因为好像只有在禁用的时候才能工作,如果没有,怎么绕过这个错误?
详细说明:
我可以使用Postman接收响应,但当尝试在ABAP上编码时,我无法获得响应。我想从api-eu.ariba.com
接收令牌。以下是我在Postman上的输入:
- 网址:https://api-eu.ariba.com/v2/oauth/token
- 方法:
POST
- 标题:
Content-Type: application/x-www-form-urlencoded
Authorization: Basic + API key
- 身体:
grant_type: openapi_2lo
当我在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
,但这不起作用。
4条答案
按热度按时间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
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客户端代理设置中进行配置。
q8l4jmvw3#
我们现在可以通过SM 59连接。
cl_http_client=>create_by_destination
连接到Ariba并传递参数。谢谢你的建议!Test Connection OK
4jb9z9bj4#
我检查了api-eu.ariba.comSSL,它看起来是有效的。也许你的日期/时间不正确或根证书丢失。
您可以在t-code SMICM中启用ICM跟踪。在SM 59中创建测试连接,然后单击测试连接按钮。然后检查ICM日志。您将在日志中获得更多详细信息。
您需要为SAP配置TLS版本和握手方法。可能您的SAP因为安全原因只接受TLS 1.3,但端点不支持它。