前言
加簽驗簽模塊早已做完了,從剛開始的一臉懵逼,到上線,前前后后兩周多吧,現在整理一下思路,記錄一下。
什么是加簽驗簽
加簽驗簽,發送消息方,對消息加簽名;接受消息方,驗證簽名是否正確。
為什么要做加簽驗簽
做加簽驗簽的目的主要目的就是,驗證消息的完整性
如何做加簽驗簽
簡單來說,
發送消息方:
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,去做驗證是否正確。
附錄:
本文僅僅是簡單的說明了一下整個加簽驗簽的思路,具體細節包括代碼就不詳細展示了,希望這個思路能給之后的自己提個醒,別忘記就好。