浅谈银行系统对接中的安全和槽点

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

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的方式,比如老版金蝶系统。

相关推荐
修己xj4 小时前
三月,我只想做好这四件事
程序员
点光10 小时前
使用Sentinel作为Spring Boot应用限流组件
后端
不要秃头啊10 小时前
别再谈提效了:AI 时代的开发范式本质变了
前端·后端·程序员
有志11 小时前
Java 项目添加慢 SQL 查询工具实践
后端
jonjia11 小时前
引入新维度化解权衡难题
程序员
jonjia11 小时前
优秀的工程师如何打破规则
程序员
jonjia11 小时前
在大厂交付大型项目的策略
程序员
jonjia11 小时前
RFC 与设计文档
程序员
jonjia11 小时前
为什么你(或任何人)应该成为一名研发经理?
程序员
jonjia11 小时前
管理技术质量 (Manage Technical Quality)
程序员