You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ABAP的if_http_client中绕过SSL认证?

问题:ABAP中如何关闭SSL验证或绕过SSL相关的HTTP通信错误?

核心问题

请问类if_http_client或其他ABAP类中是否存在可关闭SSL验证的方法?因为只有关闭SSL验证时才能正常获取响应,若没有该方法,应如何绕过此错误?

详细背景

使用Postman关闭SSL验证后能成功从https://api-eu.ariba.com/v2/oauth/token获取token,Python中设置禁用SSL验证参数也能成功,但ABAP用if_http_client调用时出现HTTP通信错误,错误信息:

Direct connect to api-eu.ariba.com:443 failed: NIECONN_REFUSED(-10)

Postman配置如下:

  • 请求方法:POST
  • 请求头:
    • Content-Type: application/x-www-form-urlencoded
    • Authorization: Basic + API密钥
  • 请求体:grant_type: openapi_2lo

已尝试的操作

  1. 将SAP Ariba EU(RSA)的公钥证书安装到STRUST中;
  2. 在OA2C_CONFIG中添加OAUTH配置文件,设置token时出现错误:

HTTP failure, processing failed, invalid state, invalid timeout or others Error calling EXECUTE_CC_FLOW.

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_true,仍无法解决问题。


解决方案

1. ABAP中无直接关闭SSL验证的官方方法

SAP出于安全考量,if_http_client及相关HTTP类未提供直接禁用SSL证书验证的参数或方法。强行绕过会带来安全风险,仅建议测试环境临时使用。

2. 绕过SSL验证的临时方案

方式一:自定义SSL标识跳过证书检查

  1. 事务码STRUST创建新SSL客户端标识(如NO_CHECK);
  2. 编辑该标识的"SSL客户端"设置,取消勾选"证书验证";
  3. 代码中替换ssl_id参数:
CALL METHOD cl_http_client=>create_by_url
  EXPORTING
    url                = lv_endpoint
    ssl_id             = 'NO_CHECK' " 使用自定义无验证SSL标识
  IMPORTING
    client             = lo_client
  EXCEPTIONS
    argument_not_found = 1
    plugin_not_active  = 2
    internal_error     = 3
    OTHERS             = 4.

方式二:通过代理中转请求

若无法修改STRUST配置,可将请求通过允许跳过SSL验证的代理发送,代码中添加代理配置:

lo_client->proxy_host = '你的代理服务器地址'.
lo_client->proxy_service = '代理端口'.

3. 解决NIECONN_REFUSED(-10)的根本方案

该错误更多是网络连接问题,而非单纯SSL验证问题:

  • 事务码SMICM测试api-eu.ariba.com:443的连通性,或用ping/telnet确认网络可达;
  • 确认SAP系统是否需通过代理访问外部网络,若需则必须在代码中配置代理参数;
  • 检查STRUST中证书是否完整:确保包含完整证书链(含中间证书)、有效期正常,且SSL标识关联正确。

4. OA2C_CONFIG配置建议

若使用OAUTH配置,确保以下步骤正确:

  1. 选择"客户端凭证"类型(对应openapi_2lo模式);
  2. 正确填写令牌端点URL(https://api-eu.ariba.com/v2/oauth/token);
  3. 配置对应Postman中Basic Auth的客户端ID和密钥;
  4. 测试时确保网络连通、SSL证书配置无误。

内容的提问来源于stack exchange,提问作者user21525821

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:02:43