平台公告

微信支付平台证书更新指引

       从2018年6月开始,微信支付开始在微信支付分、营销代金券等API,使用权威CA颁发的平台证书标识微信支付的身份信息。出于合规和安全性考虑,权威CA为颁发的平台证书设置了有效期,商户需在证书过期前进行更新操作。


本文档详细描述了微信支付平台证书更换机制及建议。

影响范围

微信支付v3接口。详细列表请见微信支付-开发文档

平滑切换

我们提供以下机制,帮助商户在更新平台证书时实现平滑切换:


1、下载新平台证书

我们将在旧证书过期前10天生成新证书。商户可使用平台证书下载API下载新平台证书,并在旧证书过期前5-10天部署新证书。


2、兼容使用新旧平台证书

旧证书过期前5天至过期当天,新证书开始逐步放量用于应答和回调的签名。商户需根据证书序列号,使用对应版本的平台证书。

(我们在所有API应答和回调的HTTP头部Wechatpay-Serial,声明了此次签名所对应的平台证书的序列号。)

最佳实践

由于旧证书过期前的5天内,微信支付会同时使用新旧证书,因此为实现新老证书的平滑切换,商户系统需支持多平台证书。

方式1

商户需通过平台证书下载API获取证书,并将其部署到生产环境中。线上服务根据报文头部的证书序列号Wechatpay-Serial找到对应的平台证书,再使用其中的公钥进行签名验证。商户需在旧证书过期前5-10天,完成新证书的部署。


商户也可以选择“惰性加载”的方式实现平滑切换。当没有证书序列号所对应的证书时,调用API获取对应的平台证书,再进行签名验证或。为了提高效率,商户可以在证书有效期内进行适当的缓存。微信支付API v3的Java库wechatpay-apache-httpclient,实现了这种方式。


我们建议:

1. 将获取和部署的过程自动化,并设置定时(如每日)任务,降低证书更新时因人为因素造成商户系统风险。

2. 使用中控服务统一获取和安全存储证书,其他业务逻辑服务使用的证书均来自于该中控服务,或者直接使用中控服务进行签名验证。


操作处理时序图:

方式2

商户也可以选择“惰性加载”的方式实现平滑切换。当业务逻辑服务上没有证书序列号所对应的证书时,调用API获取对应的平台证书,再进行签名验证或敏感信息加密。为了提高效率,商户可以在短时间内进行适当的缓存。

实现方式,可参考微信支付API v3的Java库wechatpay-apache-httpclient


注意:系统中已有的微信支付平台证书在到达有效期后,商户系统应主动将其作废,避免安全风险。微信支付不会使用过期的证书。

应急处理指引

如果商户发现证书即将过期,但系统还不支持证书的平滑更换,请参考下列处理方式。


1. 使用微信支付wechatpay-apache-httpclient的商户。请确认已升级到v0.1.5,并主动设置使用AutoUpdateCertificatewsVerifier。参考代码如下:



//不需要传入微信支付证书,将会自动更新
AutoUpdateCertificatesVerifier verifier = new AutoUpdateCertificatesVerifier(
        new WechatPay2Credentials(merchantId, new PrivateKeySigner(merchantSerialNumber, merchantPrivateKey)),
        apiV3Key.getBytes("utf-8"));

WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create()
        .withMerchant(merchantId, merchantSerialNumber, merchantPrivateKey)
        .withValidator(new WechatPay2Validator(verifier))

// ... 接下来,你仍然可以通过builder设置各种参数,来配置你的HttpClient

// 通过WechatPayHttpClientBuilder构造的HttpClient,会自动的处理签名和验签,并进行证书自动更新
HttpClient httpClient = builder.build();

// 后面跟使用Apache HttpClient一样
HttpResponse response = httpClient.execute(...);


2. 若系统已经支持多平台证书,请关注平台证书的有效期。在旧证书过期前5-10天,使用微信支付提供的证书下载工具获取新证书,并部署至生产环境。


3. 若系统只支持一份平台证书,请联系微信支付技术支持同事,我们将协助你完成证书的切换。

常见问题

1. 什么是微信支付平台证书?

● “商户证书”是指由商户申请的证书,包含商户的商户号、公司名称、公钥信息的证书。

● “平台证书”是指由微信支付负责申请的证书,包含微信支付平台标识、公钥信息的证书。


商户在调用 API 时用自身的私钥签名,微信支付使用商户证书中的公钥来验签。微信支付在响应的报文中使用自身的私钥签名,商户使用平台证书中的公钥来验签。

2. 微信支付平台证书是做什么的?

在微信支付API中,平台证书是用来标志微信支付的身份信息。商户使用平台证书识别微信支付的身份。另外,平台证书也用来保证敏感信息传输的机密性。


  1) 商户使用平台证书中的公钥,对微信支付API的应答和回调进行验签。

  2) 商户使用平台证书中的公钥,上送的敏感信息进行加密。

3. 我的平台证书什么时候过期?

商户可以使用第三方的证书解析工具查看证书有效期。

微信支付推荐使用openssl命令行工具查看证书有效期。



~ $ openssl x509 -in 1900009191_wxp_cert.cer -noout -dates
notBefore=Mar 26 03:39:50 2018 GMT
notAfter=Mar 25 03:39:50 2023 GMT

4. 不同商户号对应的平台证书是一样的吗?

出于安全性考虑,不同商户号的平台证书是不一样的。

5. 商户系统如何验证平滑切换的功能?

在旧证书过期前5天内,系统已配置新平台证书及旧平台证书,并且均可验签成功。

技术咨询

文档反馈