1. 项目概述:为什么ABAP调用HTTPS接口是个“技术活”?
在SAP ABAP开发领域,调用外部HTTP接口是家常便饭,但一旦接口地址从“http”变成了“https”,很多开发者的第一反应可能就是头疼。这感觉就像你平时开自家车出门很顺畅,突然有一天要开一辆手动挡的赛车,虽然都是开车,但离合器、换挡时机、转速匹配这些细节,一个没处理好就可能熄火。调用HTTPS接口,特别是涉及到双向认证或复杂证书链的场景,就有点这个意思。
我见过不少项目,在测试环境用HTTP调用一切正常,一上生产环境切换到HTTPS,各种“SSL handshake error”、“certificate verify failed”的错误就冒出来了,导致关键的业务数据流中断。这背后的核心,就在于HTTPS协议引入的TLS/SSL加密层。ABAP程序作为客户端,必须能够正确处理服务器的数字证书,验证其真实性,并可能还需要提交自己的客户端证书以供服务器验证。这个过程涉及到ABAP NetWeaver应用服务器的SSL客户端配置、证书的存储与管理、以及ABAP代码中HTTP客户端的正确使用。
简单来说,这个“全攻略”要解决的,就是让你从“知道要调用HTTPS接口”,到“安全、稳定、可维护地完成调用”的全过程。它适合所有需要与外部安全服务(如银行支付网关、政府税务平台、云服务API等)进行集成的ABAP开发人员、BASIS顾问以及功能顾问。无论你是刚开始接触,还是在某个环节卡住了,这篇文章都会像一份详细的“赛车驾驶手册”,带你绕过那些常见的坑,平稳抵达终点。
2. 核心原理与前置知识扫盲
在动手配置和写代码之前,我们必须先搞清楚几个关键概念。这能让你在遇到问题时,不再是盲目地搜索错误代码,而是能理解其根源。
2.1 HTTPS与TLS/SSL:不只是多了一个‘S’
很多人以为HTTPS就是HTTP加上加密,这个理解对了一半,但不全面。HTTPS = HTTP + TLS/SSL。TLS(传输层安全协议)及其前身SSL(安全套接字层),是在TCP连接建立之后、应用层(HTTP)通信开始之前,插入的一个安全握手层。
这个握手过程的核心目标是:
- 身份认证:客户端验证它正在通信的服务器确实是它声称的那个(通过服务器证书)。在某些严格要求下,服务器也会验证客户端的身份(通过客户端证书),这就是双向认证。
- 密钥协商:双方协商出一个只有彼此知道的“会话密钥”,后续所有的HTTP请求和响应内容都用这个密钥进行对称加密,保证传输的机密性。
- 完整性保护:确保数据在传输过程中没有被篡改。
对于ABAP程序(CL_HTTP_CLIENT)来说,它扮演的是TLS客户端的角色。当它尝试连接一个HTTPS地址时,会触发一系列自动的TLS握手。其中最关键的一步就是服务器证书验证。
2.2 证书、密钥库与信任链:ABAP视角下的信任体系
这是最容易出问题的部分。我们可以用一个“公司门禁”的类比来理解:
- 服务器证书:就像外部访客(服务器)出示的“身份证”。这张身份证由某个“发证机构”(CA,证书颁发机构)签发。
- CA根证书与中间证书:就像你公司信任的“公安局”(根CA)和其下属的“分局”(中间CA)。你公司的门禁系统(ABAP SSL客户端)里,预先存好了一堆你信任的“公安局”和“分局”的官方印章(CA证书)。
- 信任链验证:当访客出示身份证时,门卫(ABAP)会做两件事:
- 检查身份证本身的真伪(证书签名是否有效)。
- 更重要的,检查签发这张身份证的“分局”的印章,是否被你公司信任的“公安局”所承认。这个过程可能有多级,直到追溯到一个你门禁系统里已经信任的根CA印章为止。这条追溯路径就是“信任链”。
- 密钥库(STRUST):在SAP系统中,这个“门禁系统的信任名单”就是STRUST事务码管理的密钥库。它里面主要有两个关键的“保险柜”:
- SSL客户端标准匿名(SSL Client SSL Client (Anonymous)):这个保险柜里存放的,就是你信任的各个“公安局”和“分局”的印章(CA根证书和中间证书)。绝大多数情况下,服务器证书验证就依赖这个保险柜。如果服务器的证书链中,有一个CA证书不在这个保险柜里,验证就会失败,抛出“证书未知”或“信任链不完整”的错误。
- SSL客户端(SSL Client SSL Client):这个保险柜用于存放客户端自己的身份证和私钥,用在双向认证的场景。当服务器说“我也要查你的身份证”时,ABAP程序就需要从这个保险柜里取出自己的证书和私钥发给服务器。
一个至关重要的区别:很多开发者误以为要把外部服务器的证书导入SAP。绝大多数情况下,这是错误的,也是不必要的。你需要导入的,是签发服务器证书的那个CA的根证书(或中间证书),让SAP系统信任这个CA。服务器证书本身会在TLS握手时由服务器发送过来,SAP会用已导入的CA证书去验证它。
2.3 ABAP HTTP客户端库简述
ABAP中主要通过CL_HTTP_CLIENT类来创建HTTP客户端实例。调用HTTPS接口与HTTP接口在代码结构上大部分是相同的,核心区别在于创建客户端时指定的目标URL(以https://开头)以及背后涉及的SSL上下文。
创建客户端的基本模式是:
DATA: lo_http_client TYPE REF TO if_http_client. DATA: lv_url TYPE string VALUE `https://api.example.com/endpoint`. cl_http_client=>create_by_url( EXPORTING url = lv_url ssl_id = 'ANONYMOU' " 关键参数!指向STRUST中的SSL客户端配置 IMPORTING client = lo_http_client EXCEPTIONS argument_not_found = 1 plugin_not_active = 2 internal_error = 3 OTHERS = 4 ).其中,ssl_id参数就是指向STRUST中某个SSL客户端配置的标识符,它决定了使用哪个“保险柜”里的证书信息来进行TLS握手。
3. 实战第一步:SSL客户端配置(STRUST)详解
这是整个流程的基石,90%的HTTPS调用问题都出在这里配置不当。我们分场景来配置。
3.1 场景一:标准单向认证(仅验证服务器证书)
这是最常见的场景。你调用一个公网上常见的HTTPS API,比如微信支付、阿里云等。这些服务的证书通常由全球公认的CA(如DigiCert, GlobalSign, Let‘s Encrypt)签发。
操作步骤:
- 登录SAP GUI,运行事务码
STRUST。 - 在左侧视图,找到并双击打开
SSLClient SSL Client (Anonymous)。这是配置信任CA的地方。 - 检查现有证书:系统可能已经预装了一些常见的根CA证书。你可以先尝试不导入任何新证书,直接测试调用。如果失败并提示证书未知,再继续。
- 获取目标服务器的CA证书:
- 最佳实践:联系接口提供方,让他们提供其服务器证书的根CA证书(PEM格式)。这是最准确的方式。
- 备用方法:使用浏览器或OpenSSL命令导出。在浏览器中访问该接口的地址,点击地址栏锁图标 -> “连接是安全的” -> “证书信息”。在证书路径中,找到最顶层的根证书,将其导出为Base64编码的X.509(.cer或.crt)格式。注意:不要导出服务器证书本身,要导出它的根CA证书。
- 导入CA证书到STRUST:
- 在
SSLClient SSL Client (Anonymous)界面,点击工具栏的“导入证书”图标(或通过菜单)。 - 选择你刚才获得的PEM或CER格式的证书文件。
- 系统会显示证书信息,确认无误后继续。证书将被添加到列表中。
- 关键一步:你必须点击工具栏上的“保存”按钮(或按Ctrl+S)。STRUST的修改必须显式保存才会生效。
- 在
- 验证导入:证书导入后,会出现在列表中。其“可信”列应该被勾选。你可以双击证书查看其详细信息,确保其有效期和主题颁发者符合预期。
注意:如果服务器证书是由一个“中间CA”签发的,而这个中间CA的证书又由一个根CA签发,那么你需要确保整条信任链都被SAP系统信任。通常,你需要导入根CA证书。在某些复杂情况下,如果SAP的默认信任列表里没有中间CA,你可能也需要导入中间CA证书。导入的顺序无关紧要,关键是链上的每个CA都要被信任。
3.2 场景二:双向认证(客户端也需要提供证书)
一些安全性要求极高的系统(如某些银行接口)会要求双向认证。这意味着你的ABAP程序不仅要验证服务器,还要向服务器“亮明身份”。
操作步骤:
- 准备客户端证书和私钥:你会从接口提供方那里得到一个客户端证书(通常是
.pem或.cer文件)和一个对应的私钥文件(通常是.key文件,且可能受密码保护)。私钥必须妥善保管,绝不能泄露。 - 导入到SSL Client(非Anonymous):
- 在STRUST左侧,找到并双击打开
SSLClient SSL Client。注意,这个和上面的Anonymous是不同的节点。 - 这里通常初始是空的。点击“导入证书+密钥对”(PSE)。
- 你需要将证书和私钥合并成一个PSE(个人安全环境)文件,或者分别提供。SAP STRUST的导入界面支持上传PEM格式的证书和私钥。你需要:
- 选择你的客户端证书文件。
- 选择你的私钥文件。
- 如果私钥有密码,在指定位置输入密码。
- 为该密钥对设置一个友好的名称(如
ZMY_CLIENT_CERT)。
- 点击导入并保存。
- 在STRUST左侧,找到并双击打开
- 关联SSL配置:现在,你拥有了一个名为(例如)
ZMY_CLIENT_CERT的密钥对,它存储在SSLClient SSL Client下。当你用ssl_id = 'ZMY_CLIENT_CERT'(或你指定的其他ID)创建HTTP客户端时,ABAP运行时就会自动使用这个密钥对中的证书和私钥去响应服务器的客户端证书请求。
3.3 常见STRUST配置问题与排查
- 问题:调用时报错
SSL handshake error (error code 10053)或Certificate verify failed。- 排查:
- 检查
STRUST->SSLClient SSL Client (Anonymous)中,是否导入了正确的根CA证书并已保存。 - 使用
SMICM->Goto->SSL->Client->Test SSL Connection,输入目标主机和端口进行测试。这个工具能给出更详细的错误信息,例如“信任链中找不到证书颁发者”,这明确指向CA证书缺失。 - 确保服务器证书没有过期。
- 检查
- 排查:
- 问题:双向认证时,服务器返回“客户端证书无效”或“未提供客户端证书”。
- 排查:
- 确认在
CL_HTTP_CLIENT=>CREATE_BY_URL中指定的ssl_id参数,与你导入客户端证书密钥对的SSL配置名称一致。 - 在STRUST中检查该密钥对的证书是否有效,私钥是否匹配。
- 使用
SMICM的SSL测试功能,选择对应的客户端PSE进行测试,看是否能成功握手。
- 确认在
- 排查:
- 问题:证书已导入,但似乎不生效。
- 排查:STRUST修改后,必须重启ICM(Internet Communication Manager)服务,新的证书信任设置才会被加载。可以通过
SMICM-> 按“停止/启动ICM”按钮,或通知BASIS管理员重启相关实例。
- 排查:STRUST修改后,必须重启ICM(Internet Communication Manager)服务,新的证书信任设置才会被加载。可以通过
4. ABAP代码实现:安全调用HTTPS接口
配置好STRUST之后,我们就可以编写ABAP代码了。这里的重点是处理安全相关细节。
4.1 创建并配置HTTP客户端
DATA: lo_client TYPE REF TO if_http_client. DATA: lv_url TYPE string. DATA: lv_status TYPE i. DATA: lv_reason TYPE string. DATA: lv_response TYPE string. * 1. 创建客户端 - 关键参数 ssl_id lv_url = ‘https://secure-api.example.com/v1/data‘. TRY. “ 单向认证,使用标准匿名SSL配置 cl_http_client=>create_by_url( EXPORTING url = lv_url ssl_id = ‘ANONYMOU‘ “ 指向 STRUST 中的 ‘SSL Client SSL Client (Anonymous)‘ IMPORTING client = lo_client EXCEPTIONS OTHERS = 4 ). IF sy-subrc <> 0. “ 处理创建失败 RETURN. ENDIF. “ 双向认证,使用特定的客户端证书配置 “ cl_http_client=>create_by_url( “ EXPORTING “ url = lv_url “ ssl_id = ‘ZMY_CLIENT_CERT‘ “ 指向 STRUST 中你自定义的 SSL Client PSE “ IMPORTING “ client = lo_client ). “ 2. 设置请求方法 lo_client->request->set_method( ‘POST‘ ). “ 根据接口要求设定 GET/POST等 “ 3. 设置请求头 (至关重要!) lo_client->request->set_header_field( name = ‘Content-Type‘ value = ‘application/json‘ ). “ 常见的认证头,如Bearer Token lo_client->request->set_header_field( name = ‘Authorization‘ value = ‘Bearer your_access_token_here‘ ). “ 用户代理头,有些API会检查 lo_client->request->set_header_field( name = ‘User-Agent‘ value = ‘SAP-ABAP/7.5‘ ). “ 4. 设置请求体 (如果是POST/PUT等) DATA(lv_json_body) = `{“key“: “value“}`. lo_client->request->set_cdata( lv_json_body ). “ 5. (可选但推荐)设置超时时间,避免长时间等待 lo_client->request->set_header_field( name = ‘~timeout‘ value = ‘30‘ ). “ 单位:秒 “ 6. 发送请求 lo_client->send( EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 http_invalid_timeout = 4 OTHERS = 5 ). IF sy-subrc <> 0. “ 处理发送失败,可能是网络或SSL握手问题 DATA(lv_error) = lo_client->get_last_error( ). “ 记录或抛出错误信息 lv_error RETURN. ENDIF. “ 7. 接收响应 lo_client->receive( EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 OTHERS = 4 ). IF sy-subrc <> 0. “ 处理接收失败 lv_error = lo_client->get_last_error( ). RETURN. ENDIF. “ 8. 获取响应状态和内容 lo_client->response->get_status( IMPORTING code = lv_status reason = lv_reason ). lv_response = lo_client->response->get_cdata( ). “ 9. 根据状态码处理业务逻辑 CASE lv_status. WHEN 200. “ OK “ 解析 lv_response (JSON/XML) WHEN 401. “ Unauthorized “ Token过期或无效 WHEN 403. “ Forbidden “ 权限不足 WHEN 404. “ Not Found “ 接口地址错误 WHEN 500. “ Internal Server Error “ 服务器内部错误 WHEN OTHERS. “ 其他异常状态 ENDCASE. “ 10. 关闭连接 (良好习惯) lo_client->close( ). CATCH cx_root INTO DATA(lx_exception). “ 捕获并处理所有未预见的异常 DATA(lv_error_text) = lx_exception->get_text( ). “ 记录错误日志 ENDTRY.4.2 处理HTTPS特有的异常
除了常规的网络超时、HTTP状态码错误,HTTPS调用需要特别关注SSL相关的异常。这些异常通常在SEND或RECEIVE方法中抛出,或在后续通过GET_LAST_ERROR获取。
HTTP_COMMUNICATION_FAILURE:这是一个笼统的异常。当它发生时,必须调用lo_client->get_last_error( )来获取详细的错误信息。返回的错误文本通常会包含“SSL”、“certificate”、“handshake”等关键字,这是判断是否为SSL问题的主要依据。- 在
CATCH块或检查SY-SUBRC后,立即记录详细错误:
建立一个专门记录外部接口调用日志的表,对于后期排查周期性问题(如证书临近过期)非常有帮助。IF sy-subrc <> 0. DATA(lv_http_error) = lo_client->get_last_error( ). “ lv_http_error 会包含类似 ‘SSL handshake error: ...’ 的信息 “ 将 lv_url, lv_http_error, 时间戳等记录到应用日志表(如 ZLOG_HTTP_CALL) ENDIF.
4.3 高级配置:代理、SSL协议版本与密码套件
对于有严格安全策略的环境,可能还需要调整SSL的细节。
通过代理服务器访问:
“ 在创建客户端后,设置代理 lo_client->request->set_header_field( name = ‘~proxy_host‘ value = ‘proxy.company.com‘ ). lo_client->request->set_header_field( name = ‘~proxy_port‘ value = ‘8080‘ ). “ 如果需要代理认证 lo_client->request->set_header_field( name = ‘~proxy_authenticate‘ value = ‘basic‘ ). lo_client->request->set_header_field( name = ‘~proxy_authorization‘ value = ‘Basic ‘ && cl_http_utility=>encode_base64( ‘username:password‘ ) ).控制SSL/TLS版本和密码套件:这些通常在SAP NetWeaver的ICM(Internet Communication Manager)层面进行全局配置,而不是在单个ABAP程序中。可以通过
SMICM->Goto->SSL->Change SSL Parameters for ICM(或修改实例配置文件)来设置。例如,为了禁用老旧的、不安全的TLS 1.0和1.1,可以配置只启用TLS 1.2和1.3。修改ICM SSL参数需要BASIS权限,且重启ICM后生效。
5. 证书生命周期管理与监控
证书不是一劳永逸的配置,它有有效期。证书过期是生产环境一个典型的“午夜杀手”问题。
5.1 证书过期预警
服务器证书和CA证书都会过期。你需要建立监控机制。
- 主动监控STRUST:定期(如每月)检查
STRUST中所有导入的CA证书和客户端证书的有效期。可以手动查看,或开发一个简单的ABAP报表(使用SSFR_GET_CERTIFICATE等函数)自动扫描并列出即将过期(如60天内)的证书,发送警报邮件。 - 监控接口调用日志:如果你的接口调用日志中突然集中出现SSL握手失败,且错误信息指向证书,第一反应就应该是检查证书是否过期。
- 依赖外部通知:与接口提供方建立沟通机制,要求他们在证书续期前主动通知。但这不能作为唯一依赖。
5.2 证书更新流程
当CA或服务器证书更新时:
- 获取新证书:从权威渠道获取新的CA根证书或中间证书(PEM格式)。
- 导入STRUST:在
SSLClient SSL Client (Anonymous)中,导入新证书。最佳实践是,在旧证书过期前就导入新证书,两者并存一段时间。因为新旧证书可能在一段时间内同时有效,这样可以实现平滑过渡,避免因时间差导致的服务中断。 - 移除旧证书:确认所有依赖该旧证书的服务都稳定运行在新证书下,并且旧证书已过期后,再将其从STRUST中移除。
- 重启ICM:不要忘记!任何STRUST的修改,都需要重启ICM才能生效。安排一个合适的维护窗口。
对于客户端证书(双向认证),更新流程类似,但需要在SSLClient SSL Client中更新密钥对,并确保ABAP代码中使用的ssl_id指向正确的配置。
6. 调试与故障排除实战指南
当HTTPS调用失败时,按照以下步骤层层递进地排查,可以快速定位问题。
6.1 第一步:隔离网络与基础连接
在怀疑SSL之前,先确保基础网络是通的。
- 让BASIS管理员在操作系统层面,使用
telnet <host> <port>或openssl s_client -connect <host>:<port>测试到目标服务器端口的TCP连接和SSL握手是否成功。如果这一步就失败,问题可能在防火墙、网络路由或服务器未监听端口,与ABAP代码和STRUST无关。
6.2 第二步:使用SMICM SSL测试工具
这是SAP提供的强大内置工具。
- 运行
SMICM->Goto->SSL->Client->Test SSL Connection。 - 输入目标主机名和HTTPS端口(通常是443)。
- SSL Identifier:选择你在ABAP代码中使用的
ssl_id(如‘ANONYMOU’或‘ZMY_CLIENT_CERT’)。 - 点击“Test Connection”。
- 分析结果:
- 成功:显示“SSL handshake successful...”。证明SSL配置完全正确,问题可能出在后续的ABAP代码(如请求头、请求体格式)或应用层逻辑。
- 失败:工具会给出相对具体的错误信息,例如:
Certificate chain verification failed:信任链问题,CA证书缺失或不匹配。No shared cipher suites:SSL/TLS版本或密码套件不匹配,需要调整ICM的SSL参数。Private key not found:双向认证时,指定的PSE中私钥有问题。
6.3 第三步:分析ABAP程序中的详细错误
如果SMICM测试通过,但ABAP程序仍失败,则需深入ABAP代码。
- 确保你已经正确捕获并输出了
lo_client->get_last_error( )的信息。 - 启用HTTP客户端的详细日志(在开发或测试环境):
然后查看ST11或SLG1中对应的日志,里面会包含握手过程的详细数据包信息。“ 在创建客户端后,设置日志开关 lo_client->propertytype_logon_popup = if_http_client=>co_disabled. lo_client->propertytype_accept_cookie = if_http_client=>co_enabled. “ 设置一个较高的日志级别(注意:生产环境慎用,会产生大量日志) DATA(lo_protocol) = lo_client->get_protocol( ). IF lo_protocol IS BOUND. lo_protocol->set_log_level( 6 ). “ 高日志级别 ENDIF.
6.4 第四步:检查主机名验证(Hostname Verification)
这是一个容易被忽略的安全特性。客户端会检查服务器证书中的“Common Name (CN)”或“Subject Alternative Name (SAN)”是否与它实际连接的主机名匹配。
- 问题:你通过IP地址(
https://192.168.1.1/api)调用,但证书是为域名(api.company.com)签发的。 - 现象:SSL握手可能在底层失败,或ABAP收到一个比较泛化的错误。
- 解决:
- 最佳方案:使用证书中声明的正式域名进行调用。
- 临时方案(不推荐用于生产):在STRUST中,可以针对特定证书禁用主机名检查。在证书详情界面,有一个“Host Name Check”的开关。警告:关闭此检查会降低安全性,仅在测试或特殊场景下使用,并务必记录原因。
6.5 常见错误代码与含义速查表
| 错误现象/代码 | 可能原因 | 排查方向 |
|---|---|---|
SSL handshake error | 1. 信任链不完整(CA证书缺失) 2. 证书已过期 3. 服务器要求的SSL/TLS版本或密码套件SAP ICM不支持 4. 服务器证书的主机名不匹配 | 1. SMICM SSL测试,检查STRUST CA证书 2. 检查证书有效期 3. 联系BASIS检查/调整ICM SSL参数,或联系服务商确认其协议支持情况 4. 确保使用正确的域名调用,或检查主机名验证设置 |
Certificate verify failed | 服务器证书无法被验证 | 同“SSL handshake error”,核心是证书信任问题 |
HTTP_COMMUNICATION_FAILURE(SY-SUBRC) | 广义的网络或通信层失败 | 调用lo_client->get_last_error()获取具体SSL错误信息 |
No shared cipher suites | 客户端(ICM)与服务器之间没有共同支持的加密算法 | 调整ICM的SSL参数,启用更通用的密码套件(如包含TLS_RSA_WITH_AES_128_CBC_SHA),需权衡安全性 |
| 双向认证失败,服务器端报错 | 1. ABAP未发送客户端证书 2. 发送的客户端证书不被服务器信任 3. 客户端证书已过期 | 1. 确认ssl_id参数指向正确的、包含有效密钥对的SSL配置2. 确认服务器端已配置信任签发你客户端证书的CA 3. 检查客户端证书有效期 |
7. 安全最佳实践与架构建议
- 最小化信任原则:不要在STRUST的匿名SSL客户端中盲目导入大量CA证书。只导入你业务确实需要调用的那些服务的CA证书。这可以减少攻击面。
- 分离配置:对于生产、测试、开发系统,使用不同的SSL客户端配置(如果需要)。测试环境的证书可能和生產环境不同。
- 密钥管理:用于双向认证的客户端私钥是最高机密。确保其文件权限在操作系统层面受到严格限制。在SAP中,STRUST提供了密码保护PSE文件的功能,务必使用强密码。
- 代码封装与复用:不要在每个需要调用的地方都写一遍完整的HTTP客户端代码。将其封装成一个可复用的类或函数模块,例如
ZCL_HTTP_UTILITIES。这个封装类应该统一处理:- 客户端的创建与SSL ID的集中管理(可从配置表读取)。
- 标准的请求头设置(如User-Agent, Accept)。
- 异常处理与统一错误日志记录。
- 响应解析(JSON/XML)的辅助方法。
- 连接超时、读取超时的统一配置。
- 配置外部化:将接口的URL、SSL ID、超时时间等参数存储在自定义配置表(如
ZHTTP_API_CONF)中,而不是硬编码在程序里。这样在环境迁移或配置变更时,无需修改程序。 - 考虑使用SAP Cloud Connector:如果你需要从本地部署的SAP系统访问云平台(如SAP BTP, SuccessFactors)的HTTPS服务,强烈建议使用SAP Cloud Connector。它作为一个安全代理,可以处理复杂的云身份认证(如OAuth2),简化ABAP端的调用逻辑,你只需要调用Cloud Connector暴露的内部HTTP端点即可。
最后,处理HTTPS调用问题,耐心和系统性排查是关键。从STRUST配置这个根基开始,用SMICM测试工具验证,再到ABAP代码中完善错误处理,每一步都清晰了,这道“安全之门”自然就会为你敞开。每次解决一个这类问题,最好能简单记录下问题和解决方案,积累成你们团队内部的Wiki,下次再遇到,可能就是五分钟的查档功夫,而不是半天的抓耳挠腮了。