升级微信支付HTTPS根证书

接到微信通知:

微信支付HTTPS服务器证书的根CA证书将于2018年8月23日到期失效,微信支付计划于2018年5月29日,更换服务器证书。若你的服务器上没有部署新的根CA证书,将可能导致你的下单、退款等功能无法正常使用。

新的服务器证书由权威机构(DigiCert) 签发,部分操作系统和执行环境中已经内置了该根CA证书。

我们微信支付用的服务器是阿里云,操作系统是CentOS 7,如下:

[root@iZ11lymhp8xZ /]# cat /etc/redhat-release   
CentOS Linux release 7.0.1406 (Core)   

1. 检查服务器是否支持DigiCert 根证书

在用户不频繁使用支付系统的时间段内,将微信支付网关域名(api.mch.weixin.qq.com)解析到微信支付指定的测试IP。

  • 电信: 113.96.240.139
  • 联通: 157.255.180.139
  • 其它(移动, 长城等): 121.51.30.139

增加解析域名:

echo "113.96.240.139 api.mch.weixin.qq.com" >> /etc/hosts

执行如下命令:

openssl s_client -connect api.mch.weixin.qq.com:443  -verify_return_error 

如果不解析到新的ip,返回的是GeoTrust的根证书,如下:

CONNECTED(00000003)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = GeoTrust Inc., CN = GeoTrust SSL CA - G3
verify return:1
depth=0 C = CN, ST = guangdong, L = shenzhen, O = Tencent Technology (Shenzhen) Company Limited, OU = R&D, CN = payapp.weixin.qq.com
verify return:1
---
Certificate chain
 0 s:/C=CN/ST=guangdong/L=shenzhen/O=Tencent Technology (Shenzhen) Company Limited/OU=R&D/CN=payapp.weixin.qq.com
 i:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3
 1 s:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G3
 i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
 ...
 以下隐去了证书的内容

解析到新的ip,如果返回DigiCert的根证书,没有报错,表示服务器已经内置了该根CA证书,如下:

CONNECTED(00000003)
depth=3 C = IE, O = Baltimore, OU = CyberTrust, CN = Baltimore CyberTrust Root
verify return:1
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = GeoTrust RSA CA 2018
verify return:1
depth=0 C = CN, L = Shenzhen, O = Tencent Technology (Shenzhen) Company Limited, OU = R&D, CN = payapp.weixin.qq.com
verify return:1
---
Certificate chain
 0 s:/C=CN/L=Shenzhen/O=Tencent Technology (Shenzhen) Company Limited/OU=R&D/CN=payapp.weixin.qq.com
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=GeoTrust RSA CA 2018
1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=GeoTrust RSA CA 2018
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
2 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
i:/C=IE/O=Baltimore/OU=CyberTrust/CN=Baltimore CyberTrust Root

如果报错,说明要安装证书,微信支付已经提供了不同语言(Java\C\C++\C#等)的安装方法,可参考微信支付HTTPS服务器证书验证指引,别的语言如PHP、python可参考C的安装方法。

2. 测试是否正常工作

测试一下微信支付下单、退款是否正常,可用自己写的业务系统做测试。

3. 打扫战场,去除测试环境域名解析

测试成功后,删除微信支付网关域名解析,因为“微信支付服务器证书更新完成后,此处使用的IP会被关停”。