关注我的公众号:【编程朝花夕拾】,可获取首发内容。

01 引言
银行系统的安全级别应该是相当高的,与银行接口对接(银企直联)过程中也遭遇了平时开发中不常见的问题,甚至当时表示不理解。
前前后后对接了两家银行:招商银行和中信银行,安全要求各异,也体会到不同的安全策略也有一些槽点分享给大家。
02 业务描述
通常意义的付款都是通过第三方支付公司或者银行转账的方式完成,但是企业可能需要嵌入到业务系统中,例如财务人员通过操作业务系统的审核、审批等操作,操作的功能通过调用银行的转账接口完成转账功能,这种功能在银行系统中有一个产品叫做「银企直联」。
开通银企直连功能之后,就可以通过业务系统完成付款、退款等操作,为财务人员节省了流程。财务人员的对于钱款的进入都有严格的流程、尤其出账更是有层层审核才能真正出账。
出账入账是否成功,开发人员为了核对是否真正的成功,需要通过拉取银行流水或者查询单笔经办的交易状态来完成,支付成功后的回调或者状态回写。
业务人员为了判断用户是否付款成功而进行后续业务流程,有需要查看银行的回单。因为回单有银行的公章,是付款的有效凭证之一。
除此之外,银行的产品还有很多、如子账户、分账、现金池、以及跨境业务等。
03 前置机安全机制
银行对接的前置机(Front-End Processor, FEP)是银行业务系统中的关键组件,通常部署在银行内部网络与外部网络(如银联、第三方支付、跨行交易系统)之间,主要负责协议转换、数据安全、交易路由、流量控制等功能。
简单来说,前置机就像一个堡垒机。所有对接的请求都必须通过前置机才能到达银行。而前置机大部分外网是无法访问的。
会有哪些优势呢?
3.1 隔离性
前置机一般都是独立部署的,需要单独的机器。与复杂的业务完全隔离,即便前置机异常也不会曹成系统的不可用,前置机和业务的交互直接通过Http请求的方式交互。
3.2 可复用性
可复用性极高,因为独立部署,又采取通用的HTTP协议,只要某个系统需要使用,直接发送Http请求即可,无法再次部署。
尤其测试环境,多套测试环境的情况下,同一个账号调用同一个前置机即可,无需根据环境更新前置机。
这里的前置机更像一个中间件一样,串联着所有的系统。
3.3 复杂度
前置机不同的银行提供的方式大同小异,一般就是一个客户端,按照步骤安装即可。相比于SDK嵌入式开发来讲,避免了依赖的冲突。依赖冲突的解决是一件麻烦的事。
04 数据的加解密
数据的加密的目的就是为了避免明文传输。这也是等保的硬性要求。
中信银行采用的是Base64编码请求参数,响应的结果也需要通过Base64解码才能拿到结果。
反观招商银行对于参数的处理先是通过国密(SM4-CBC)对参数加密,再通过Base64编码,还在部分参数的基础上做了签名,防止参数被篡改。响应的结果同样需要解密才能解析。
05 槽点
对接的操作基本来源于中信银行,可能因为先对接的招商银行,相比之下中信银行的对接显的更加麻烦。
5.1 前置机的支持

这个是招商银行的前置机,既支持windows也支持linux。而中信的前置机则只支持windows系统。因为服务器基本都是Linux系统,而Window反而变的麻烦。
下面是中信的客户端操作说明:

5.2 接口方式
招商银行采用的流行的json数据传输,而中信银行采用的是传统的xml方式传输数据。xml数据的传输和获取相比json就麻烦一下。
回想一下老的系统基本都是XML的方式,比如老版金蝶系统。