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

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

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

相关推荐
间彧2 小时前
电商大促与秒杀场景下的水位管理:从容量规划到动态调控的全链路实践
后端
tryxr2 小时前
Java 中 this 关键字的使用场景
java·开发语言·类与对象·this关键字
Coder_Boy_2 小时前
Spring 核心思想与企业级最佳特性(思想级)
java·后端·spring
毕设源码-朱学姐2 小时前
【开题答辩全过程】以 红色旅游网站为例,包含答辩的问题和答案
java
Catcharlotte2 小时前
反射和设计模式
java
C++业余爱好者2 小时前
Spring Boot 应用程序中的进程与线程管理:从JAR启动到请求响应的完整分析
spring boot·后端·jar
要开心吖ZSH2 小时前
Spring Boot + JUnit 5 + Mockito + JaCoCo 单元测试实战指南
java·spring boot·junit·单元测试
原来是好奇心2 小时前
Spring源码深度解析(一):Spring的设计灵魂——控制反转与依赖注入的演进之路
java·spring·源码
艾莉丝努力练剑2 小时前
Al Ping免费上新:GLM-4.7 && MiniMaxM2.1重磅上线,附独家使用教程
java·大数据·linux·运维·人工智能·python