从2018年6月起,微信支付开始在微信支付分、营销代金券等API,使用权威CA颁发的平台证书标识微信支付的身份信息。出于合规和安全性考虑,权威CA为颁发的平台证书设置了有效期,商户需在证书过期前进行更新操作。本文档详细描述了微信支付平台证书更换的机制,以及提供实现建议。
我们提供以下的机制,帮助商户在平台证书更新时实现平滑切换:
1.下载新平台证书。我们将在旧证书过期前10天生成新证书。商户可使用平台证书下载API 下载新平台证书,并在旧证书过期前5-10天部署新证书。
2.兼容使用新旧平台证书。旧证书过期前5天至过期当天,新证书开始逐步放量用于应答和回调的签名。商户需根据证书序列号,使用对应版本的平台证书。(我们在所有API应答和回调的HTTP头部Wechatpay-Serial,声明了此次签名所对应的平台证书的序列号。)
由于旧证书过期前的5天内,微信支付会同时使用新旧证书,因此为实现新老证书的平滑切换,商户系统需支持多平台证书。
商户需从平台证书下载API获取证书,并将它们部署到生产环境中。线上服务根据报文头部的证书序列号Wechatpay-Serial找到对应的平台证书,再使用其中的公钥进行签名验证。商户需在旧证书过期前5-10天,完成新证书的部署。我们建议:
1.将获取并部署的过程自动化,并设置定时(如每日)任务。这样可以大大降低证书更新时人为因素带给商户系统的风险。
2.使用中控服务统一获取和安全存储证书,其他业务逻辑服务使用的证书均来自于该中控服务,或者直接使用中控服务进行签名验证。
商户也可以选择“惰性加载”的方式实现平滑切换。当业务逻辑服务上没有证书序列号所对应的证书时,调用API获取对应的平台证书,再进行签名验证或敏感信息加密。为了提高效率,商户可以在短时间内进行适当的缓存。
实现方式,可参考微信支付API v3的Java库wechatpay-apache-httpclient
注意:系统中已有的微信支付平台证书在到达有效期后,商户系统应主动将其作废,避免安全风险。微信支付不会使用过期的证书
如果商户发现证书即将过期或已经过期,但系统还不支持证书的平滑更换,请参考下列处理方式。
1.使用微信支付wechatpay-apache-httpclient 的商户。请确认已升级到v0.1.5,并主动设置使用AutoUpdateCertificatewsVerifier。请参考自动更新证书功能。
2.若系统已经支持多平台证书,请关注平台证书的有效期。在旧证书过期前5-10天,使用微信支付提供的证书下载工具获取新证书,并部署至生产环境。
3.若系统只支持一份平台证书,请使用联系微信支付的技术支持同事。我们将协助你完成证书的切换。