测试中很多接口需要数字签名
在做接口测试时,大家一定都遇到过需要提供签名的场景。这时,我们就会被各种名词比如 签名和验签、公钥和私钥、加密和解密 冲击。所以,了解一下它们很有必要,可以帮助我们知道为什么要这么做,而不是简单的去当一个验证执行者。甚至,在你了解了它们之后,你也可以在接口的安全性测试上更进一步。
什么是数字签名
数字签名其实就是一个别人无法仿造,能够证明申请者真实性的一段字符串。我们在真实生活中,最常用的签名应该就是手签我们的姓名了。
所以,在接口请求时,很多接口也不是你来一个请求我就给你返回你要的数据,而是要验证你的签名,进而证明你的身份后才能做出后续动作。在此过程中,接口调用者需要进行的工作就叫做签名,而被调用者需要进行的工作就叫做验签。
什么是公钥和私钥
公钥:由接口被调用方提供,RSA 密钥体系中对外公开的部分,通常用于数据加密、验证数字签名。
私钥:由接口被调用方提供,RSA 密钥体系中非公开的部分,需由接口调用方严密保存,通常用于数据解密、数据签名。
什么是加密和解密
这个就很好理解了,传递数据时为了保证数据的安全性,不进行明文传递,而是通过某种算法对敏感数据进行加密,传递后再由接收方使用对应算法进行解密来获取明文信息。
将上面的定义总结为图,会更加的清晰:
为什么要用私钥加签,公钥加密
加签的目的:验证信息的发送方是否正确,信息是否被其他人篡改。
之所以用发送方的私钥加签,是因为,即便信息被黑客拦截,黑客修改了信息,但是加签需要用发送方的私钥,黑客没有发送方的私钥,所以也无法生成正确的签名,接收方验签就不用通过。
反之如果用接收方的公钥加签,如果信息被黑客拦截,黑客修改了信息,因为接收方的公钥是公开的,黑客就可以重新生成新的签名,替换原有的签名,发送出去,接收方接收到信息,拿自己的公钥校验是通过的,所以接收方无法辨别信息是真正的发送方还是黑客发送过来的,这样的加签不能辨别信息是否被篡改过。
加密的目的:保证信息的隐私,不被别人看到,只能让接收方看到正确的信息。
之所以用接收方的公钥加密,是因为,如果信息被黑客拦截,需要用接收方的私钥来解密,黑客无法获取接收方的私钥,即便拦截了信息(情报),黑客也无法看到明文,只能看天书?了。
反之,如果用发送方的私钥加密,如果信息被黑客拦截,因为发送方的公钥是公开的,黑客就可以用发送方的公钥解密密文获得明文,这样的加密所有的人都可以看到明文,不能保证信息的隐私。
测试人需关注
了解了以上这些知识,在测试过程中就可以更加深入的了解签名的目的,进而可以更深入的了解签名的实现等。签名的实现有很多种,这个要根据每个团队选择哪种具体分析,但作为测试,基本上我们都是可以按照约定的规则来生成的,这也帮助我们扩展了接口测试覆盖的广度(如接口用例覆盖度、过期时间等隐藏功能),是非常有意义的。