**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_拒绝(-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
,但这不起作用。
3条答案
按热度按时间jhkqcmku1#
看起来你已经差不多了
a)在STRUST中TRUSTariba.com。
使用网络浏览器去网站,点击挂锁并下载他们的证书。
T-Code STRUST导入证书。将其应用于CLIENT SSL Anon和标准PSE部分。
但是NIEHOST错误与SSL区域不同。因此,您还应该检查DNS以及SAP系统是否可以访问该URL。
有时你需要在TCode SICF中配置一个CLIENT代理。如果您的组织使用代理进行外部HTTP连接,则必须在SICF客户端代理设置中进行配置。
mwkjh3gx2#
我们现在可以通过SM 59连接。
cl_http_client=>create_by_destination
连接到Ariba并传递参数。谢谢你的建议!Test Connection OK
kxkpmulp3#
我检查了api-eu.ariba.com SSL,它看起来有效。可能您的日期/时间不正确或根证书丢失。
您可以在t代码SMICM处启用ICM跟踪。在SM 59创建测试连接,然后单击测试连接按钮。然后检查ICM日志。您将在日志中获得更多详细信息。
您需要为SAP配置TLS版本和握手方法。也许你的SAP只接受TLS 1.3,因为安全原因,但端点不支持它。