從2018年6月起,微信支付開始在微信支付分、營(yíng)銷代金券等API,使用權(quán)威CA頒發(fā)的平臺(tái)證書標(biāo)識(shí)微信支付的身份信息。出于合規(guī)和安全性考慮,權(quán)威CA為頒發(fā)的平臺(tái)證書設(shè)置了有效期,商戶需在證書過(guò)期前進(jìn)行更新操作。本文檔詳細(xì)描述了微信支付平臺(tái)證書更換的機(jī)制,以及提供實(shí)現(xiàn)建議。
我們提供以下的機(jī)制,幫助商戶在平臺(tái)證書更新時(shí)實(shí)現(xiàn)平滑切換:
1.下載新平臺(tái)證書。我們將在舊證書過(guò)期前10天生成新證書。商戶可使用平臺(tái)證書下載API 下載新平臺(tái)證書,并在舊證書過(guò)期前5-10天部署新證書。
2.兼容使用新舊平臺(tái)證書。舊證書過(guò)期前5天至過(guò)期當(dāng)天,新證書開始逐步放量用于應(yīng)答和回調(diào)的簽名。商戶需根據(jù)證書序列號(hào),使用對(duì)應(yīng)版本的平臺(tái)證書。(我們?cè)谒蠥PI應(yīng)答和回調(diào)的HTTP頭部Wechatpay-Serial,聲明了此次簽名所對(duì)應(yīng)的平臺(tái)證書的序列號(hào)。)
由于舊證書過(guò)期前的5天內(nèi),微信支付會(huì)同時(shí)使用新舊證書,因此為實(shí)現(xiàn)新老證書的平滑切換,商戶系統(tǒng)需支持多平臺(tái)證書。
商戶需從平臺(tái)證書下載API獲取證書,并將它們部署到生產(chǎn)環(huán)境中。線上服務(wù)根據(jù)報(bào)文頭部的證書序列號(hào)Wechatpay-Serial找到對(duì)應(yīng)的平臺(tái)證書,再使用其中的公鑰進(jìn)行簽名驗(yàn)證。商戶需在舊證書過(guò)期前5-10天,完成新證書的部署。我們建議:
1.將獲取并部署的過(guò)程自動(dòng)化,并設(shè)置定時(shí)(如每日)任務(wù)。這樣可以大大降低證書更新時(shí)人為因素帶給商戶系統(tǒng)的風(fēng)險(xiǎn)。
2.使用中控服務(wù)統(tǒng)一獲取和安全存儲(chǔ)證書,其他業(yè)務(wù)邏輯服務(wù)使用的證書均來(lái)自于該中控服務(wù),或者直接使用中控服務(wù)進(jìn)行簽名驗(yàn)證。
商戶也可以選擇“惰性加載”的方式實(shí)現(xiàn)平滑切換。當(dāng)業(yè)務(wù)邏輯服務(wù)上沒(méi)有證書序列號(hào)所對(duì)應(yīng)的證書時(shí),調(diào)用API獲取對(duì)應(yīng)的平臺(tái)證書,再進(jìn)行簽名驗(yàn)證或敏感信息加密。為了提高效率,商戶可以在短時(shí)間內(nèi)進(jìn)行適當(dāng)?shù)木彺妗?
實(shí)現(xiàn)方式,可參考微信支付API v3的Java庫(kù)wechatpay-apache-httpclient
注意:系統(tǒng)中已有的微信支付平臺(tái)證書在到達(dá)有效期后,商戶系統(tǒng)應(yīng)主動(dòng)將其作廢,避免安全風(fēng)險(xiǎn)。微信支付不會(huì)使用過(guò)期的證書
如果商戶發(fā)現(xiàn)證書即將過(guò)期或已經(jīng)過(guò)期,但系統(tǒng)還不支持證書的平滑更換,請(qǐng)參考下列處理方式。
1.使用微信支付wechatpay-apache-httpclient 的商戶。請(qǐng)確認(rèn)已升級(jí)到v0.1.5,并主動(dòng)設(shè)置使用AutoUpdateCertificatewsVerifier。請(qǐng)參考自動(dòng)更新證書功能。
2.若系統(tǒng)已經(jīng)支持多平臺(tái)證書,請(qǐng)關(guān)注平臺(tái)證書的有效期。在舊證書過(guò)期前5-10天,使用微信支付提供的證書下載工具獲取新證書,并部署至生產(chǎn)環(huán)境。
3.若系統(tǒng)只支持一份平臺(tái)證書,請(qǐng)使用聯(lián)系微信支付的技術(shù)支持同事。我們將協(xié)助你完成證書的切換。