原创, 支付方式, 服务器, ,

微信支付HTTPS根证书更换问题解决方案

微信支付根证书升级,实际更换中遇到的问题在这里整理下来

资料1:微信支付HTTPS服务器证书验证指引

此处是指导商户更新证书的指导页面,此处需要几点注意的是  证书安装和验证

验证证书使用 纱窗地址https://apitest.mch.weixin.qq.com/sandboxnew/pay/getsignkey

模拟数据可以参考发放普通红包 的 xml信息

验证命令:终端输入

echo '<xml><!--使用普通红包里面的xml信息或自己编写, 不要带xml头信息, 不要直接复制此段话--></xml>'|curl -X POST -H 'Content-type:text/xml' -d @- https://apitest.mch.weixin.qq.com/sandboxnew/pay/getsignkey

返回成功信息如下

<return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[ok]]></return_msg>

其他参数请参考资料1文档

如果返回值为FAIL 则看安装证书部分

安装证书我们使用C/C++的这样可以直接在命令行中运行

查看跟证书命令

openssl version -a

可以看到类似记录 OPENSSLDIR: “/etc/pki/tls”

在运行

openssl s_client -connect api.mch.weixin.qq.com:443  -verify_return_error  -CApath $OPENSSLDIR #将OPENSSLDIR更换为上面获得的路径

看是否含有如下信息

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

如果不上上面 的 Baltimore 和 DigiCert  可能还需要为服务器绑定下host

113.96.240.139 api.mch.weixin.qq.com #电信使用
#157.255.180.139 api.mch.weixin.qq.com #联通使用
#121.51.30.139 api.mch.weixin.qq.com #其他使用

请根据实际情况选用

之后重新查看上面命令运行是否正常

更换跟证书之后 尝试正式环境支付出现SSL的60错误或者提示 Peer certificate cannot be authenticated with known CA certificates

CURLE_SSL_CACERT (60)
Peer certificate cannot be authenticated with known CA certificates.

错误代码地址:libcurl error codes

这个错误是 curl中

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);
curl_setopt($ch,CURLOPT_CAINFO,‘/cacert/DigiCert_Global_Root_CA.pem’);

可以设置
CURLOPT_SSL_VERIFYPEER 为FALSE
或者 CURLOPT_SSL_VERIFYPEER 设置为TRUE,CURLOPT_CAINFO 修改为 Baltimore_CyberTrust_Root.pem 这个证书
由于目前微信证书并未实际切换到对应服务器上 则还是需要保证 host记录是存在的
113.96.240.139 api.mch.weixin.qq.com #电信使用
官方提醒:注意:验收完成后,请及时恢复服务器上的host配置,微信支付服务器证书更新完成后,此处使用的IP会被关停。
目前我只能说等到5月底在将host记录删除掉吧 不知道有没有其他好的办法不用写host

 

(1112)

Related Post