前言
加签验签模块早已做完了,从刚开始的一脸懵逼,到上线,前前后后两周多吧,现在整理一下思路,记录一下。
什么是加签验签
加签验签,发送消息方,对消息加签名;接受消息方,验证签名是否正确。
为什么要做加签验签
做加签验签的目的主要目的就是,验证消息的完整性
如何做加签验签
简单来说,
发送消息方:
1、根据消息内容形成摘要
2、根据摘要形成签名字段
3、发送消息
接受消息方:
1、接受消息
2、根据消息内容形成摘要
3、根据摘要去验证签名是否正确
详细思路
上面讲的很粗略,这里我们从整个过程来讲解一下。
首先是环境:
发消息方A、接受消息方B、一个需要发送的消息段[merNo=001,user=zhangm,pwd=abc123,check=6387]、证书生成工具tools.jar
过程:
1、使用工具生成根证书,用户证书。
a. 填写工具配置信息。tools会根据消息交互双方的信息+密码生成两个证书,其中双方的信息不重要,重要的是密码。即:保存密码。
b. tools会生成一个密钥库,密钥库的密码是上一步设置的密码。然后tools还会生成一个密钥对,即公钥和私钥。然后将公钥和私钥存放到密钥库中。最后tools会生成两个证书文件:根证书【可以得到公钥和私钥】、用户证书【可以得到公钥】。
c. 得到我们想要的东西:根证书、用户证书、密码。其中根证书与密码是一起的,因为从根证书中得到私钥是需要密码的。【注:公钥与私钥其实就是两个字符串】
2、管理证书
a. A保存根证书与密码,B保存用户证书。
3、发送消息
a. A通过消息[merNo=001,user=zhangm,pwd=abc123,check=6387]形成摘要,摘要的形成方式自行选择,一般来讲是通过整个消息段做摘要。这里提供一个摘要形成方式:对三个消息字段的值进行一个自定义的排序,形成一个摘要,比如:摘要字段[abc123001zhangm6378],这是一种比较简单的摘要形成方式。复杂一点的有先对整个消息通过加密算法进行加密形成加密消息作为摘要。
b. A通过根证书与密码得到公钥和私钥
c. A通过公钥和私钥对摘要字段进行签名,形成签名字段。说白了,就是对上一步形成的摘要[abc123001zhangm6378]通过公钥和私钥形成一个加密的串。假设签名字段【加密串】为:w8y98hf。【实际会很长】。
d. A重新组装消息。将签名字段放到消息体中。[merNo=001,user=zhangm,pwd=abc123,check=6387,sign=w8y98hf]
e. A发送消息
4、接收消息
a. B接收消息
b. B根据merNo号去匹配对应的用户证书,然后从证书中拿到公钥。
c. B通过与A协定好的方式,通过消息字段生成摘要[abc123001zhangm6378]
d. B通过摘要字段[abc123001zhangm6378],公钥,签名字段sign=w8y98hf,去做验证是否正确。
附录:
本文仅仅是简单的说明了一下整个加签验签的思路,具体细节包括代码就不详细展示了,希望这个思路能给之后的自己提个醒,别忘记就好。