跟微信支付對(duì)接的時(shí)候从隆,最麻煩的就是各種不同的證書石抡、秘鑰摊册、簽名娶耍,因?yàn)樯婕傲硕喾N不同的場(chǎng)景贵少,容易搞混登钥,所以整理一下拆挥。本文針對(duì)微信支付V3接口中的安全機(jī)制糜烹。
證書
證書一般是由CA權(quán)威機(jī)構(gòu)頒發(fā)违诗,一般包含了網(wǎng)站與公鑰的信息,用于創(chuàng)建HTTPS加密連接
商戶API證書
微信支付的商戶API證書是PKCS12格式疮蹦,可以提取商戶API私鑰和證書序列號(hào)诸迟,也包含了公鑰,其中公鑰需保存到微信支付后臺(tái)。
- 獲取方式:需要使用微信支付工具申請(qǐng)獲得
- 使用場(chǎng)景:提取API私鑰(商戶保存)阵苇,提取公鑰(保存到微信支付)壁公,提取序列號(hào)(與微信支付協(xié)同加解密)
平臺(tái)證書
微信支付的平臺(tái)證書跟其他網(wǎng)站的證書不一樣,不同商家拿到的證書不同绅项。
- 獲取方式:調(diào)用微信支付接口(返回公鑰和序列號(hào))紊册,私鑰肯定是不會(huì)給了
- 使用場(chǎng)景:使用公鑰加密敏感信息,比如手機(jī)號(hào)碼快耿;公鑰和序列號(hào)都是同時(shí)使用囊陡,如果用到公鑰,就需要在頭部
私鑰
商戶API私鑰
- 獲取方式:從商戶API證書提取
- 使用場(chǎng)景:請(qǐng)求簽名(往微信支付發(fā)出的請(qǐng)求润努,都需要使用該私鑰簽名)关斜,當(dāng)然同時(shí)還需要有證書序列號(hào)
平臺(tái)公鑰
- 獲取方式:其實(shí)就是平臺(tái)證書中的一部分
- 使用場(chǎng)景:商家使用公鑰對(duì)敏感信息加密,比如手機(jī)號(hào)碼铺浇,這樣就只有微信支付可以解密痢畜,保證了信息的安全
APIv3密鑰
這個(gè)秘鑰比較特別,不是從證書中獲取的鳍侣,而是在微信支付商戶平臺(tái)設(shè)置的丁稀。只有設(shè)置了APIv3秘鑰,才可以獲取平臺(tái)證書倚聚,平臺(tái)證書也是加密過的线衫,需要用APIv3秘鑰解密
- 獲取方式:微信支付商戶平臺(tái)設(shè)置
- 使用場(chǎng)景:微信回調(diào)信息的解密;平臺(tái)證書的解密
總結(jié)
安全主要體現(xiàn)在簽名和信息的加密
- 簽名:都是發(fā)送方使用己方的私鑰簽名惑折,接收方使用對(duì)應(yīng)的公鑰驗(yàn)證簽名
- 敏感信息的加密:一般使用接收方的公鑰加密授账,接收方使用私鑰解密
- 回調(diào)的接口數(shù)據(jù)加密:因?yàn)槭俏⑿胖Ц栋l(fā)起的(也就是可能發(fā)給多個(gè)商家,微信支付也擔(dān)心發(fā)送給了錯(cuò)誤接收方惨驶,或者商戶配置的回調(diào)URL錯(cuò)誤)白热,為了防止信息被意外泄露,所以還要對(duì)內(nèi)容再做一步對(duì)稱加密(APIv3秘鑰)