news 2026/5/25 1:17:13

在 SAP 中,关于 SFTP 和 Application Server 的文件传输

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 SAP 中,关于 SFTP 和 Application Server 的文件传输

本篇基于 SAP Note 2007916、SAP Note 795131 两篇官方说明,整理 SAP 应用服务器(Application Server)与外部 SFTP/HTTPS 服务器之间安全文件传输的实现方案、配置要点、代码示例与避坑指南,适合 EC Payroll、接口集成、批量文件交换场景。

一、先搞懂:SAP 与 SFTP 的核心矛盾

很多项目会遇到这种需求:

  • 对端只支持 SFTP(SSH File Transfer Protocol)
  • SAP 应用服务器只能走 HTTPS 出站
  • 要求文件加密传输 / 落地加密

官方明确两点:

  • SAP 标准功能不直接支持 SFTP,SAPFTP 不支持 SFTP/FTPS。
  • PGP 加密不属于 EC Payroll 标准服务,云环境无法安装额外加密组件。

所以必须走:HTTPS 中转 + 自定义 ABAP 程序 + SSF 加密方案。

二、整体方案架构(官方推荐)

SuccessFactors 提供标准落地:

  • SAP App Server → HTTPS → SuccessFactors SFTP 服务器
  • SFTP 服务器 → SFTP → 最终接收方

全程可做 PKCS#7 加密 / 解密,也可直接对接支持 HTTPS 上传 / 下载的任意文件服务器。

三、实施前提条件(必须配齐)

1. 权限与事务配置

  • FILE 事务:维护入站 / 出站逻辑路径、文件名
  • SM59 事务:创建类型 G(HTTP 连接到外部服务器)
    • 目标主机:远程文件服务器
    • 登录凭证:用户 / 密码
    • 路径前缀:留空
    • 做连接测试,必须成功
  • STRUST 事务:
    • 导入外部服务器 CA 证书(SSL 客户端标准)
    • 维护 SSF 类型 PSE(RSA+SHA256,自签名即可)
    • 接收方公钥加入信任列表
  • 权限对象:
    • S_DATASET、PROGRAM SAPLSCMS_FILE、ACTVT=33(读文件)
    • 如需 AL11 查看,配 S_TCODE=AL11

2. PSE 关键要求

  • 类型:SSF
  • 算法:RSA + SHA-256
  • 可自签名
  • 接收方证书必须在 PSE 信任列表

四、ABAP 示例程序(来自 Note 2007916)

1. 程序功能

  • 出站:App Server 文件 → 加密(可选)→ HTTPS 上传
  • 入站:HTTPS 下载 → 解密(可选)→ 存 App Server
  • 支持单文件 / 批量、二进制传输、MIME 类型自动识别

2. 核心类结构

  • LCL_FILE:文件读写、加密、解密、XString 转换
  • LCL_FILE_HTTP:HTTP 客户端,PUT/GET 请求
  • LCL_SAMPLE:主逻辑,选择屏幕、出站 / 入站分发

3. 关键函数模块

  • 加密:SSF_KRN_ENVELOPE(PKCS#7)
  • 解密:SSF_KRN_DEVELOPE
  • 文件上传:SCMS_UPLOAD
  • 逻辑文件名:FILE_GET_NAME / FILE_VALIDATE_NAME

4. 部署步骤

  • SE38 创建程序,如 ZSAMPLE_CRYPT_TRANSFER_FILE
  • 上传示例代码
  • 激活程序
  • 维护文本元素与选择文本
  • 激活文本

5. 选择屏幕说明

  • RFC 目标:SM59 的 G 类型连接
  • PSE / 接收方:STRUST 里的 SSF 应用与证书主题
  • 出站:本地文件 / 批量、远程目录、是否加密
  • 入站:远程文件路径、是否解密

五、Note 795131 补充:SAPFTP 无法做安全 FTP

  • SAPFTP 不支持 SFTP 和 FTPS
  • 如需安全 FTP,只能通过 SSH 隧道转发
  • 企业级场景优先用 Note 2007916 的 HTTPS+SSF 方案

六、常见坑与注意事项

  • 加密报错:PSE 必须是 SSF 类型、RSA 算法、接收方证书已导入
  • HTTPS 连接失败:STRUST 证书有效、SM59 测试成功、服务器 443 端口放行
  • 文件权限:逻辑路径正确、目录读写权限充足、避免硬编码物理路径
  • 后台运行:RFC 目标保存凭证、程序避免弹窗、日志写入 SM21

七、总结

SAP 本身不原生支持 SFTP,但通过官方推荐的HTTPS 中转 + SSF 加密方案,可安全、稳定地完成 Application Server 与外部 SFTP/HTTPS 服务器的文件传输。该方案适配云环境、支持加密、可后台调度,是 EC Payroll 及批量文件交换场景的标准实现方式。


附件说明:ZSAMPLE_CRYPT_TRANSFER_FILE.txt

本附件为 SAP 官方 Note 2007916 提供的完整 ABAP 示例代码,用于实现 SAP 应用服务器(Application Server)与外部 SFTP/HTTPS 服务器之间的安全文件传输。

功能覆盖:

  1. 出站传输:从 SAP 应用服务器读取文件,支持 SSF(PKCS#7)加密后通过 HTTPS 上传至 SFTP 服务器。
  2. 入站传输:从 SFTP 服务器通过 HTTPS 下载文件,支持 SSF 解密后保存至 SAP 应用服务器。
  3. 支持单文件与批量文件处理、二进制传输、自动识别 MIME 类型。

适用场景:SuccessFactors EC Payroll 集成、批量文件交换、跨系统安全接口对接。

部署要求:需提前配置 SM59(G 类型 HTTP 连接)、STRUST(SSL 证书与 SSF PSE)、FILE 事务逻辑路径及相关权限。

*&---------------------------------------------------------------------* REPORT zsample_crypt_transfer_file. *&---------------------------------------------------------------------* *& *& Sample report for *& a) transferring a file from the application server *& to an external file server via HTTP(S) protocol *& Optionally, the file can be encrypted before sending *& b) fetching a file from an external server via HTTP(S) and *& saving it to the application server. *& Optionally, the file can be decrypted before saving *& *& !!! Basic example only - coding needs to be adapted by customer!!! *& *& For adapting to customer specific needs, pay special attention *& to comments marked with '@CUSTOMER' *& *& !!! MESSAGE and WRITE statements !!! *& !!! to be used only for testing in dialog mode!!! *& Define appropriate messages and write to application log *& in order to run the program in batch mode *& *&---------------------------------------------------------------------* *& M O D I F I C A T I O N L O G * *&---------------------------------------------------------------------* *& Date Author Description * *&---------------------------------------------------------------------* *& yyyy-mm-dd XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX* *& *&---------------------------------------------------------------------* * ====================================================================== * Local classes * ====================================================================== * ====================================================================== * lcl_file: * Represents the file, provides basic operations like SAVE, and * cryptographic operations * ===================================================================== CLASS lcl_file DEFINITION FINAL. PUBLIC SECTION. TYPES: tty_line TYPE STANDARD TABLE OF ssfdata . CONSTANTS gc_mode_orig TYPE c VALUE '1' ##NO_TEXT. CONSTANTS gc_mode_decrypted TYPE c VALUE '2' ##NO_TEXT. CONSTANTS gc_mode_encrypted TYPE c VALUE '3' ##NO_TEXT. CONSTANTS gc_line_length TYPE i VALUE 255 ##NO_TEXT. METHODS save IMPORTING !iv_pathname TYPE fileintern !iv_mode TYPE flag DEFAULT '2' . METHODS encrypt IMPORTING !iv_pse TYPE ssfappl !iv_recipient TYPE certsubjct RAISING cx_crypto_error . METHODS decrypt IMPORTING !iv_pse TYPE ssfappl !iv_recipient TYPE certsubjct RAISING cx_crypto_error . METHODS create_from_xstring IMPORTING !iv_xstring TYPE xstring !iv_pathname TYPE string !iv_bytes TYPE i OPTIONAL . METHODS load_from_applsrv IMPORTING !iv_pathname TYPE fileintern !iv_filename TYPE string RETURNING VALUE(rv_subrc) TYPE i . METHODS get_mimetype RETURNING VALUE(rv_mimetype) TYPE w3conttype . METHODS get_xstring IMPORTING !iv_mode TYPE c EXPORTING !ev_xstring TYPE xstring !ev_length TYPE i !ev_subrc TYPE sysubrc . PRIVATE SECTION. DATA: mv_extension TYPE string, mt_decrypted_line TYPE tty_line, mt_encrypted_line TYPE saml2_pse_bin_data_t, mt_source_line TYPE tty_line, mv_decrypted_length TYPE i, mv_encrypted_length TYPE i, mv_filename TYPE string, mv_source_length TYPE i, mv_mimetype TYPE w3conttype. METHODS set_name_and_type IMPORTING !iv_pathname TYPE string . ENDCLASS. CLASS lcl_file IMPLEMENTATION. METHOD create_from_xstring. * IMPORTING * !iv_xstring TYPE xstring * !iv_pathname TYPE string * !iv_bytes TYPE i OPTIONAL . " ------------------------------------------------------------- " Creates file content from given xstring and sets some " instance attributes. " Method can be used e.g. after retrieving a file via HTTP GET " ------------------------------------------------------------- DATA: lv_xstring TYPE xstring, lv_line TYPE ssfdata. lv_xstring = iv_xstring. IF iv_bytes IS INITIAL. mv_source_length = xstrlen( lv_xstring ). ELSE. mv_source_length = iv_bytes. ENDIF. WHILE xstrlen( lv_xstring ) > 0. lv_line = lv_xstring. APPEND lv_line TO mt_source_line. SHIFT lv_xstring LEFT BY gc_line_length PLACES IN BYTE MODE. ENDWHILE. set_name_and_type( iv_pathname ). ENDMETHOD. METHOD decrypt. * IMPORTING * !iv_pse TYPE ssfappl * !iv_recipient TYPE certsubjct * RAISING * cx_crypto_error . " ----------------------------------------------------------------- " Decrypts the binary content of the original file and " puts the result into mt_decrypted_line " ----------------------------------------------------------------- FIELD-SYMBOLS: <ls_source_line> TYPE ssfdata. DATA: ls_encrypted_line TYPE ssfbin, lt_encrypted_line TYPE saml2_pse_bin_data_t, lv_ssftoolkit TYPE ssftoolkit, lv_str_format TYPE ssfform, lv_str_profile TYPE ssfprof, lv_crc TYPE ssfreturn, lt_recipient TYPE TABLE OF ssfinfo, ls_recipient TYPE ssfinfo. " Before decrypting, we need to re-format the content: " Decryption works with a structured line type, but " the original content has a flat line type LOOP AT mt_source_line ASSIGNING <ls_source_line>. CLEAR ls_encrypted_line. ls_encrypted_line-bindata = <ls_source_line>. APPEND ls_encrypted_line TO lt_encrypted_line. ENDLOOP. CALL FUNCTION 'SSF_GET_PARAMETER' EXPORTING mandt = sy-mandt application = iv_pse IMPORTING ssftoolkit = lv_ssftoolkit str_format = lv_str_format str_profile = lv_str_profile EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0. WRITE: / 'SSF parameter read failed - see system log (SM21)'. RAISE EXCEPTION TYPE cx_crypto_error. ENDIF. " function module needs a recipient list: ls_recipient-id = iv_recipient. ls_recipient-profile = lv_str_profile. APPEND ls_recipient TO lt_recipient. CALL FUNCTION 'SSF_KRN_DEVELOPE' EXPORTING ssftoolkit = lv_ssftoolkit str_format = lv_str_format ostr_enveloped_data_l = mv_source_length IMPORTING ostr_output_data_l = mv_decrypted_length crc = lv_crc TABLES ostr_enveloped_data = lt_encrypted_line recipient = lt_recipient ostr_output_data = mt_decrypted_line EXCEPTIONS OTHERS = 1. IF sy-subrc <> 0 OR lv_crc <> 0 OR mt_decrypted_line IS INITIAL. WRITE: / 'Decryption for file ', mv_filename, ' failed - see system log (SM21)'. RAISE EXCEPTION TYPE cx_crypto_error. ELSE. WRITE: / 'File ', mv_filename, ' decrypted'. ENDIF.
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 1:07:17

混合建模与EMPC在船舶碳捕集系统动态经济优化中的应用

1. 项目概述&#xff1a;当船舶减排遇上混合智能控制在航运业迈向碳中和的宏大叙事中&#xff0c;船舶碳捕集技术正从一种前沿探索&#xff0c;逐渐演变为一条极具现实可行性的脱碳路径。想象一下&#xff0c;一艘万吨巨轮航行在海上&#xff0c;其柴油主机轰鸣作响&#xff0c…

作者头像 李华
网站建设 2026/5/25 1:04:43

多无人机协同通信-计算

上图为应用场景&#xff0c;当发生灾难&#xff0c;灾区附近基站损坏&#xff0c;无法将灾区情况传输到地面站&#xff0c;可以使用多台无人机进行协同通信-计算。系统的步骤大致如下&#xff1a;&#xff08;1&#xff09;状态监控包括 ssdp 发现和心跳保持。 &#xff08;2&a…

作者头像 李华
网站建设 2026/5/25 0:52:58

AI Agent的产品市场契合度验证:寻找高ROI场景的五个核心问题

AI Agent的产品市场契合度验证&#xff1a;寻找高ROI场景的五个核心问题 关键词&#xff1a;AI Agent、产品市场契合度PMF验证、ROI计算框架、Agent适配场景、高价值循环、量化验证、MVP构建 摘要&#xff1a;当AI Agent像“2024年的移动APP”一样成为科技圈新宠时&#xff0c;…

作者头像 李华
网站建设 2026/5/25 0:48:56

服务网格安全策略:定义和执行服务间的安全规则

服务网格安全策略&#xff1a;定义和执行服务间的安全规则 一、服务网格安全策略概述 1.1 服务网格安全策略的定义 服务网格安全策略是指在服务网格中定义和执行的安全规则&#xff0c;用于保护服务间通信的安全性。它包括认证、授权、加密和流量控制等方面&#xff0c;确保服务…

作者头像 李华
网站建设 2026/5/25 0:33:10

Linux sudo 提权配置 + 普通用户精准授权(运维必备)

前言普通用户不能用 root&#xff0c;必须靠 sudo 提权。本篇教你安全、规范、生产可用的 sudo 配置。一、sudo 是什么&#xff1f;让普通用户可以执行指定的 root 命令&#xff0c;不需要知道 root 密码。二、编辑 sudo 配置&#xff08;必须用 visudo&#xff09;bash运行vis…

作者头像 李华