在新的工商银行接口中时使用HTTPS的API,直接连接工商银行接口,可以不使用前置机,但增加RAS非对称加密,遇到了一些新问题,在这里记录下。
工行的RSA加密相关功能最后使用了JAVA做服务软件 来解决,后来的一个供应链金融项目连接航信、联易融项目使用了RAS相关的加密,可参看这里。
1.RSA 加解密与签名验签介绍
一般来说,有两种场景:加密解密和签名验签
加密解密:使用公钥加密,私钥解密
签名验签:使用私钥加密(签名),公钥解密(验签)
例如:B 生成一对密钥,向 A 提供公钥,B 保留私钥
加密解密:防止信息泄露
当 A 系统传输数据给 B 系统,担心报文明文传输会导致信息泄露,则可使用公钥对报文进
行加密,以防传输过程中信息泄露。B 接收加密报文,通过私钥进行解密
签名验签:防止信息篡改
当 B 接收后返回消息给 A,担心返回消息被修改,导致 A 接收到错误消息,则可使用私钥
进行签名,并将签名和返回报文一起发送给 A。A 通过公钥进行验签,发现签名解析后的
明文和返回报文数据一致,证明报文没有被中间拦截篡改
在图中的B系统是工商银行,A系统就是SAP系统,B系统 会提供一个公钥给我们,这个公钥,可以在参看工行“SDK开发”中网关公钥中得到。测试机会得到一个API_GATEWAY.pub的文件,生产机会在申请后可下载。
同时在工行“SDK开发”中密钥生成时还会生成两个文件(进入到bin目录,双击keygen_rsa.bat文件,生成一对RSA公钥和密钥),
2.工商银行接口介绍
具体信息可参看工商银行API开放平台
3.SAP连接工商银行细节
3.1.得到工行公钥
- 参看工行“SDK开发”,得到工行公钥,测试机公钥文件API_GATEWAY.pub。
3.2.创建我们企业使用的公、私钥
参看工行“SDK开发”,创建我们企业使用的公、私钥,如后图;
3.3.创建*.PSE文件证书
使用前一步的私钥文件,生成一个*.pse证书,此步骤需要BASIS协助。
1.复制前面生成的私钥文件为icbcrsa.key,
2.上传到SAP服务器,比如:/tmp/rsa
3.用私钥文件生成PSE,执行成功后生成/tmp/rsa/icbc.pse文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/tmp/rsa > openssl req -x509 -sha256 -key icbcrsa.key -out icbc.cer -days 3650 -subj '/CN=icbc' /tmp/rsa > openssl pkcs12 -export -inkey icbcrsa.key -in icbc.cer -out icbc.pf x -nodes Enter Export Password: Verifying - Enter Export Password: /tmp/rsa > setenv SECUDIR $PWD /tmp/rsa > sapgenpse import_p12 -x "" -p icbc.pse icbc.pfx Found key 'INDEX=0,SIG=YES,ENC=YES,MD5-FINGERPRINT=3B9E 77DD E5E4 3371 19FA 2FCF D1CA 512F,KEYID=3D1E2BC7E33500A3D2A098B63FE9962A6B63318C' !!! WARNING: For security reasons it is recommended to use a PIN/passphrase !!! WARNING: which is at least 8 characters long and contains characters in !!! WARNING: upper and lower case, numbers and non-alphanumeric symbols. PSE "/tmp/rsa/icbc.pse" was written |
4得到证证收相关信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
DATA: i_signature TYPE string, i_ssfappl TYPE ssfappl VALUE 'SSO2', r_signed_data TYPE string. DATA: lr_conv_to_x TYPE REF TO cl_abap_conv_out_ce, l_format TYPE ssfform, l_profileid TYPE ssfid, l_profile TYPE ssfprof, l_hashalg TYPE ssfhash, l_signaturex TYPE xstring, l_signed_datax TYPE xstring, ls_signer TYPE ssfinfo, lv_crc TYPE ssfparms-ssfcrc, "#EC NEEDED lt_signer TYPE TABLE OF ssfinfo. CALL FUNCTION 'SSF_GET_PARAMETER' EXPORTING application = i_ssfappl IMPORTING str_format = l_format str_profileid = l_profileid str_profile = l_profile str_hashalg = l_hashalg EXCEPTIONS ssf_parameter_not_found = 1 OTHERS = 2. "#EC FB_RC |
4.太麻烦了,还是用JAVA做蹭件吧
找不到BASIS验证,银行已做好很多JAR包可以直接调用加加解密等操作,在SAP做太麻烦,还是直接找JAVA做了一个件,省事,
如要在SAP做的话,也可以参考这里。
参考了网上很多资料,来源网络。致谢!