背景
客户公司的欧盟分公司要与德意志银行(DB)做银企直连接口,实现自动付款和确认。
银行允许的方式有下面几种,重点研究了这两种FTPS和SFTP。通讯通过中间件PO,文件格式和文件名格式使用银行标准,内容需要PGP签名加密。
Research
File format要求
SAP support上的一些research:
- sftp Support
Q: Does the File Adapter support the sftp (File Transfer over SSH) protocol?
A: We have SFTP adapter that supports File transfer over SSH protocol released only for 7.11/7.30/7.31 releases. The SFTP adapter is part of the SAP NetWeaver Process Orchestration, secure connectivity add-on 1.0. - FTPS: “AUTH TLS” Command Unrecognized
Q: After configuring a File Adapter channel with the Transport Protocol “FTP” and connection security set to “FTPS”, I receive the following error in the adapter monitoring: Syntax error, command unrecognized: ‘AUTH TLS’
What is causing this?
A: Your FTP server implementation does not implement FTPS as specified in RFC 4217. For details, contact your FTP server vendor. - Test FTP Server Connection.
Q: How to Test FTP Server Connection.?
A: Please refer to note 1085539.
方案对比:
SFTP vs. FTPS in SAP PI里写的比较清楚。
SFTP(SSH File Transfer Protocol)
介绍:
SSH就是对传输的内容加密,这样即使被截获了也是安全的,SFTP加密的是会话session(通常使用SSH-2协议),它最大的好处就是可以只开一个加密的通道就可以传输多个文件,也就是防火墙上只有一个洞通上外面。使用SFTP,
- 如果是inbound,会使用带有安全协议的UNIX 脚本从第三方系统将文件传输到SAP XI中的一个文件夹。一旦文件放上去以后,XI的文件适配器扫描路径,并使用NSF协议取从该文件;
- 如果是outbound,XI负责将文件写入XI指定的文件夹中,这些文件通过使用安全协议(即sFTP)执行UNIX脚本传输到第三方系统。
前提:
- 外部系统和PI系统之间需要交换公钥(public key)
- 要部署好UNIX脚本先
优点:
- 更安全
- 能够在单个加密管道上处理多个安全文件传输,通过使用单个加密管道,公司防火墙中的漏洞更少。
缺点:(简单说就是安装复杂,XI不能监控,出错了也不好排查)
- 每次传输都要经过两步,要先生成文件放到指定路径,然后再传输
- 会生成临时文件
- 会有更多的可能的故障点,UNIX和XI都有可能出现故障
- 外部的UNIX脚本也需要维护
- 因为是脚本运行,所以无法通过XI监控,需要BASIS更多的参与
- 需要生成密钥并将其安装到SFTP站点作为先决条件,即SFTP客户端必须在服务器上安装密钥。
- SFTP使用密钥而不是证书,这意味着它不能利用通过证书颁发机构促进的“信任链”范例
- 需要定期删除/归档XI服务器上的文件
另外:UNIX shell脚本可以作为后台作业执行,也可以在文件适配器级别通过操作系统命令从SAP XI触发。
FTPS(File Transfer Protocol Using SSL/TLS)
介绍:
FTPS是XI中File adapter的一个内置特性,不过也需要先安装SAP Java Cryptographic Toolkit,(参看上面的问题28)本质上还是FTP,它是SSL之上的文件传输层。SSL,或安全套接字层,是一种在FTP客户端和FTP服务器之间建立加密“管道”或隧道的方法。一旦建立了安全通道(使用128位加密技术),就使用标准FTP在安全连接上传输数据。
控制数据(Control data)和数据(data)使用不同的端口:
- 显式FTPs 分别使用990(control)和989(data)
- 隐式FTPs分别使用21(control)和20(data)
前提:
- 安装SAP Java Cryptographic Toolkit
优点:
- 直接输文件到/从第三方系统,不需要将文件临时存储在XI服务器中。
- 内置功能
- 对比SFTP,它无需额外的Unix Script开发和维护
- 可以使用XI的集中监控工具进行监控
- FTPS使用证书,因此可以利用通过证书颁发机构促进的“信任链”范例。(这种模式使得两个实体可以建立信任关系,而不需要直接交换安全信息,这对某些应用程序来说很重要。)
缺点:
- 需要在防火墙中打开多一个端口来实现SSL
- 并不是每一个FTP服务器都支持FTPS,需要更改配置来激活FTPS协议扩展
- SAP Java Cryptographic Toolkit是一个收费软件
PGP(Pretty Good Privacy)
PGP 最初的核心目的是保护 Email 通信的隐私性。为此,PGP 包含两个机制。
- 实现加密。PGP 同时使用了对称加密和公钥加密算法。首先用公钥加密算法让双方互通对称加密的秘钥,然后用对称加密的秘钥去加密通信内容本身。
- 确认发信人身份。这需要同时用到数字签名和公钥身份认证的功能。使用 PGP 签名的时候可以使用 RSA 或者 DSA 算法。
总之,PGP 中包含各种常见的密码学功能。当前使用 PGP 的方式,就是去下载遵循 OpenPGP 标准的软件,其中 GPG 是最知名的一款。
GPG(GNU Privacy Guard)
GPG 可以用来签署和加密数据。方便发送和接收方进行数据加密和对方身份的确认。GPG 使用对称加密技术来加密大段内容,而采用非对称加密技术来交换对称加密的秘钥。
下面列出 GPG 能够完成的几个主要功能。
- 第一,生成非对称加密的秘钥对
GPG 支持的非对称加密方式包含 RSA 和椭圆曲线等常见非对称加密的算法。 - 第二,可以用对称加密的方式来对文件进行加密。加密 gpg -c …和解密 gpg -d … 用同一个密码即可。支持 AES 这样的算法。
- 第三,可以用 ZIP 来压缩文件。
Server fingerprint
SFTP 需要填入server fingerprint,下面是从网上找截的
可以问管理员,也可以使用工具CoreFTP进行查看
文件要求
File name Conversion
Type of files to be sent
公钥文件
SSH public Key
简单说,使用SSH登录Linux,ssh 登陆验证分两种: password 和publickey,这里银行要使用的就是PublicKey,这样无需密码就可以登录到Linux Server 。和
-
password方式:
通过用户名和密码的方式验证身份! -
publickey方式:
publickey方式使用publickey privatekey的方式验证,你需要生成一对publickey privatekey.
把publickey放到服务器上.你登陆的时候,服务器会用你的publickey去验证用你的用privatekey加密过的信息.
由于服务器上的只是publickey,即使被黑了,也不怕密码丢失.比上面那种password方式更加安全.
F110
没有使用EPIC,而是使用的F110自动付款,F110将支付客户或供应商的未清项目、结清这些项目以及创建可发送给银行的付款媒介。
F110调试技巧
DMEEX
F110 自动付款前提是DMEEX
银行回来的statement文件处理
note 106121
实施
PO安装SFTP ADAPTER
下载:Note 1695521
安装:https://blogs.sap.com/2016/03/12/sftp-addon-installation-in-pi-nw-75-using-sum-15/
装完一系列的sca文件之后还有ESR CONTENT要导入
https://answers.sap.com/questions/9848910/index.html
https://archive.sap.com/documents/docs/DOC-75271
导入之后才有SFTP ADAPTER
生成SSH秘钥
参考
分别在生产,测试,开发环境生成这3个文件
生成PGP秘钥
参考
配置文件服务器发送路径和接收路径
付款文件文件名增强
为了在文件名后面增加时间戳
主要是参考note2965441,TCODE:OBPM3
参考模版函数创建函数ZFI_PAYMEDIUM_SAMPLE_21
这里找到对应的event,然后填上COPY的自定义函数名
PO配置
导入秘钥
将SSH私钥导入
PGP秘钥
将两个PGP秘钥文件放在PO服务器的某个路径下,下面这三个信息是要在adapter中填写的,另外这个路径下还放了银行提供的PGP公钥,一共涉及有5个秘钥文件,一对SSH秘钥,一对PGP秘钥,和一个银行提供的公钥。其中SSH公钥和PGP公钥发给银行,SSH私钥导入到PO,PGP私钥和银行的公钥放到PO服务器某个路径下。
SAP(file)–PO–(SFTP)DB 付款文件接口
因为不涉及字段的mapping和结构的转换,只传输文件,所以不需要创建任何ESB对象,只创建接口通道既可。
首先创建一个Business Component BC_DBBANK
其中创建Communication Channel ‘CC_SAP_FILE_SENDER’ ‘CC_BANK_SFTP_RECEIVER’ 分别是SAP文件的发送方和银行的SFTP接收方
因为要动态文件名,所以要把这两个勾选
最重要的是下面这两个配置
下面的参数涉及到PGP加密,具体参数可以参考
这些参数是和银行前期沟通好的,比如是否压缩,要不要签名,不写的话会使用默认的设置,最重要的就是参数的位置,sequence很重要,包括下面的接收接口,一定要把PGP加密和解密放在最上面,别问为什么!
因为是刚COPY出来,这里漏掉了一个参数 pwdOwnPrivateKey,私钥的密码,加上就好,包括下面解密时也是需要这个参数
接下来是IC
不用搜索帮助,用也没有,直接手工写入就好
前期准备工作做好以后,这里PO配置很简单。
DB(SFTP)–PO–(file)SAP 银行回单接口
上面发送接口配好以后就是接收接口,同样是两个CC和一个IC
‘CC_BANK_SFTP_SENDER’和’CC_SAP_FILE_RECEIVER’
这里和CC_BANK_SFTP_RECEIVER基本相同,参考上图说明吧
测试
F110, printout
此时会在文件路径下生成付款文件
发送接口处理后会将文件放到归档路径下
查看PO日志
发送的接收都成功了,接受的文件也是解密成功的状态,可以使用AL11直接查看内容。
一种坑特别特别特别的多,没有一一记录,但只要看这些步骤和参数安装和配置,应该就还会有问题的哈,怎么可能这么顺利!
下面几个重要的点可以再检查一遍,提高成功率:
- 网络要通,互通,因为双方都有防火墙策略,所以首先确保双方网络是通的。
- 双方把SSH证书都正常导入了,并且确定证书是没有问题的,按双方沟通好的参数生成证书。
- PGP证书也有可能出现问题,发送给对方前自己拿工具Kleopatra测一下加密和解密,正常了再发送。
- 导入的导入和SERVER中的证书权限设置要正确。
- 证书的密码要记住,别搞错。
- PO配置细节很多按照上图中提示的几个重要项一一配置。
祝好运!
其它
如何测试对方SFTP IP和端口是否可用?
sftp -v -P <port> <user>@<IP>
正常是提示欢迎界面并要求输入密码。
另外还可以使用
nc -v -w2 <IP> <port>
如何确定系统中的SAPCRYPTOLIB版本?
TCODE: SSF02
: SSF测试程序
参考:
note 821267
note 1085539 : how to test FTP connection
https://www.iban.hk/glossary
https://www.gendan5.com/swiftcode.html
SWIFT Code 和 Routing Number 的关系
IBAN和SWIFT代码有什么不同?
SSH和SSL
SFTP vs. FTPS in SAP PI
How to configure FTPS in File Adapter
SFTP with PI the openSSH way
SAP PI SFTP Adapter Authentication
Receiver sFTP Adapter Configuration
Step-by-step FTP to ABAP Proxy
SAP SFTP Receiver Adapter with Dynamic Filename
Configuring the SFTP Receiver Channel
PGPDecryption Module: A Simple How to Guide
B2B Add-On PGP module – Learning and POV
Using PGP in Process Integration