首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ABAP中的.CRT和.KEY文件调用HTTP端点?

使用ABAP中的.CRT和.KEY文件调用HTTP端点?
EN

Stack Overflow用户
提问于 2022-11-25 19:41:47
回答 2查看 92关注 0票数 4

我试图通过从if_http_client实例化cl_http_client=>create_by_url来使用ABAP的端点。当我不需要使用经过签名的证书时,这个过程可以正常工作。通常,我只包含使用STRUST事务的证书。

但是对于这个特殊情况,我有两个证书文件:.crt.key。我可以从Postman获取端点,因为我可以在Settings -> Certificates中插入这些文件

那么,我怎样才能让它从ABAP中运行呢?如何在我的http请求中插入这些文件?我应该从ABAP代码中传递它们,还是在STRUST或其他传输中配置它?

EN

回答 2

Stack Overflow用户

发布于 2022-11-26 04:38:13

编辑:随着更多细节的出现,修改后的答案能更好地解决问题。请注意:这是带有SSL的HTTP客户端(而不是服务器)的ABAP。这也是一个非典型的问题。在这里,SAP系统必须使用特定的客户端证书连接到另一个服务,以建立SSL连接。通常在网络级别上管理的东西。

加载证书时,必须将其加载到客户端PSE区域的STRUST中。

前面的想法(在编辑/返工之前)将证书作为标题发送,将其解释为选项3。

备选方案:

1) ABAP中的SSL握手。试图在ABAP中管理SSL握手很可能是不可能的。SSL握手由皂苷sapcryptolib管理。

2)将STRUST中的客户端证书导入标准客户端。详情见下文

( 3)使用xxxx.cer作为字符串,并将其添加为Http报头(最后一种方法,如果选项2不起作用)

==============================================================

2)选项2--详细信息(最佳方法)--将您的证书导入到Standard中。

下面是一个实际案例的标准sap docu的示例。这是荷兰公司的薪资界面。使用私钥证书。*.p12或*.pfx文件。私钥证书

SPV/491c29ac9232469bb257a2ba14ac290c/999ad0ce8bd24945b547584e776e9a4e.html

由于这种类型的证书不能直接导入到SAP中,所以它解释了如何在操作系统级别上使用sapgenpse将p12转换为pse文件。Strust不支持导入p12文件。

现在ABAP调用使用在此步骤中创建的客户端标识。

代码语言:javascript
复制
 cl_http_client=>create_by_url(
            EXPORTING
              url                = 'url'           
              ssl_id             = 'CL_ID' "Ident created in step above  
            IMPORTING
              client             = lo_client       
          ).

或者更容易相处。使用Sm59创建和外部http并选择这个新创建的标识。

然后调用通过目的地创建的http客户端。

代码语言:javascript
复制
CALL METHOD cl_http_client=>create_by_destination
  EXPORTING
    destination              = lv_destination "the new sm59 destination 
  IMPORTING
    client                   = lo_http_client.
  1. 选项3细节:(不理想,假设被调用的服务支持它)。当且仅当,被调用的服务支持证书作为标头注您的xxx.cer是等效的标识密钥。小心地管理绳子。 数据: lo_client类型REF到if_http_client。cl_http_client=>create_by_url(导出url = 'url‘ssl_id = 'ANONYM’“以匿名SSL导入客户端= lo_client开始SSL握手)。

“并将实际标识作为HTTP报头传递,”许多服务支持这种方法。但他们的解决方案总是“特定于该服务”。示例是microsoft翻译服务。“期望用户订阅键作为标题。'https://api-eur.cognitive.microsofttranslator.com/translate?api-version=3.0

代码语言:javascript
复制
lo_client->request->set_header_field(
      EXPORTING
        name  = 'Client-Cert'    "Check HTTP header name with called Service docu
        value = '<cert> in string format'
    ).
    
    "lo_client->send( .. )
    "lo_client->receive( .. )
票数 2
EN

Stack Overflow用户

发布于 2022-12-02 14:50:40

使用KeyStore资源管理器工具从客户端密钥和证书创建单个pfx文件。此外,您还可以将客户端证书的链与此工具放在一起。

在本地系统上使用皂启,并使用以下命令从pfx文件创建一个pse文件:

代码语言:javascript
复制
sapgenpse import_p12 -p c:\client.pse c:\client.pfx

转到STRUST,在Enviroment->SSL客户端标识处创建您自己的证书存储。我更喜欢这个,因为我不把它们都混合在一起。然后返回到STRUST并选择PSE->Import并选择您的自定义pse文件。然后单击PSE->Save并选择您的自定义标识。

将站点SSL证书添加到新标识中。

您可以通过选择新的SSL客户端标识在SM59上尝试新的SSL客户端配置。

下面是ABAP代码示例。

代码语言:javascript
复制
REPORT ZMKY_SSL_CLIENT.

 DATA: lo_client TYPE REF TO if_http_client,
       lv_code   TYPE i,
       lv_REASON type string.

   cl_http_client=>create_by_url(
     EXPORTING
       url                = 'https://mysslclienthost.com'
       ssl_id             = 'MYSSLC'      "Your SSL Client identity
     IMPORTING
       client             = lo_client
   ).

   lo_client->SEND( ).

   lo_client->RECEIVE( ).

   lo_client->RESPONSE->GET_STATUS( IMPORTING CODE = lv_code
                                    REASON         = lv_reason ).

   WRITE: lv_code, lv_reason.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74577287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档