一、系统间页面跳转安全需求
很多企业应用都有以下的场景:第三方系统携带参数跳转到本公司应用的页面,需要确定这个跳转确实是由特定第三方公司发起的,跳转的时候携带的参数不被黑客修改,携带的参数是加密的,不能明文显示,这就是典型的的安全要求:
1、确保数据来源可信
2、确保数据不被泄漏
3、确保数据不被篡改
二、安全方案
1、采用数字签名算法确保来源可信
数字签名算法可以看作是带有密钥的消息摘要算法,是非对称加密算法和消息摘要算法的结合体,能够对数据的来源进行认证,保证来源的可信,防止数据传输过程中的伪冒。一般情况下,数字签名算法是先使用消息摘要算法对原始消息进行摘要计算,然后使用私钥对摘要值进行签名处理,验证签名的时候择使用公钥验证消息的摘要值。
典型的数字签名算法有:RSA、DSA、ECDSA、国密SM2等,其中RSA堪称是非对称加密算法的经典,基于RSA算法秘钥,结合消息摘要算法就可以形成对应的签名算法,例如MD5WithRSA、SHA1WithRSA等。
2、采用对称加密算法加密数据
对称加密算法是目前应用范围最广的加密算法,其加密的密钥和解密的密钥是相同的,所以称为对称加密,加密的速度较快,性能较好,常用于数据传输过程中原始数据的加密。
目前最常见的对称加密方式有:DES、3DES、AES、IDEA、PBE等,其中AES和3DES应用最为广泛。
3、采用摘要算法防止数据被篡改
消息摘要算法普遍应用于验证数据的完整性,判断用于数据是否被篡改过,这是非常重要的,如果没有校验很容易导致被篡改的数据进入系统,对于金融等行业来说,是非常严重的。
消息摘要算法经过多年的发展,主要包括以下几种:MD算法、SHA算法、MAC算法、CRC算法,说起MD5、SHA1、CRC32,都是大家耳熟能详的算法了,应用非常广泛。
三、使用案例
既然整体方案确定了,那么我们接下来就一起以一个具体的案例来看看使用以上方案进行安全跳转的步骤:
1、假设待跳转的连接为:http://baidu.com,待携带的参数为name=hello。
2、使用AES对称算法对hello进行加密,生成加密后的加密值。
3、使用CRC32算法对"name=hello加密值"进行消息摘要处理,生成校验码记为crc,这里也可以使用其他的算法,自主选择合适的即可。如果有多个待携带的参数,则按照字典进行参数排序,以key=value的形式用&进行拼接。
4、第三方系统生成公私钥,使用MD5WithRSA算法,使用私钥对"name=hello加密值"字符串进行签名,签名值使用Base64算法编码,记为sign。
5、将参数、crc、sign携带在url上进行跳转,http://baidu.com?name=xxxxxxxxx&crc=yyyyyyy&sign=zzzzzzz
6、服务端收到跳转请求以后解析url上的参数,分别获取到name,crc和sign。
7、服务端使用第三方系统提供的公钥对sign签名进行签名校验
8、校验通过以后对参数按照字典进行排序,以key=value的形式用&进行拼接,然后同样使用CRC32算法进行摘要计算,生成出的校验码与crc值进行比对,如果相等,则证明了完整性。
9、使用双方约定的AES密钥对参数的值进行解密,得到最终的参数值。
以上就完成了完整流程的跳转安全校验,其中使用的算法可以根据需要灵活替换。