素履百科

商户API证书和微信支付平台证书均可以使用第三方的证书

nazhan 11 0

调用“下载平台证书接口”,返回:SIGN_ERROR, Authorization不合法

请根据以下几点排查:

1、请检查待签名串的参数的格式是否和文档中要求的严格一致。

2、请注意文档中参数末尾的换行符要求,如body为空则需要使用两个n换行符。

为什么境外机构号重置证书后,旧的证书依然可以调用v2接口使用?

境外机构号重置证书后,旧的证书依然可以调用v2接口使用的原因:

1、存在平滑过渡期,并非立即失效。

2、自签换CA有14天,CA换CA48小时。

支付API证书升级工具,在Mac下使用官方的生成工具,未在指定目录找到证书文件是什么原因?

目前只有windows版本支持,建议在window7以上系统使用。

平台证书获取并解密后,进行敏感字段加密时,java代码提示invalid key format

这个是在读取证书获取公钥时有问题,需要检查使用的类在新版本jdk中是否deprecated的,如jdk9中是deprecated的。

如何查看证书序列号?

登录商户平台【account settings】->【API security】->【API certificate】,可查看商户API证书序列号。

商户API证书和微信支付平台证书均可以使用第三方的证书,查看证书内容。或者使用openssl命令行工具查看证书序列号。

1$ openssl x509 -in 1900009191_20180326_cert.pem -noout -serial 2serial=1DDE55AD98ED71D6EDD4A4A16996DE7B47773A8C 3

如何在程序中加载证书?

推荐使用微信支付提供的SDK。你也可以查看下列编程语言的示例代码。

JAVA

1/** 2 * 获取证书。 3 * 4 * @param filename 证书文件路径 (required) 5 * @return X509证书 6 */ 7public static X509Certificate getCertificate(String filename) throws IOException { 8 InputStream fis = new FileInputStream(filename); 9 BufferedInputStream bis = new BufferedInputStream(fis); 10 11 try { 12 CertificateFactory cf = CertificateFactory.getInstance("X509"); 13 X509Certificate cert = (X509Certificate) cf.generateCertificate(bis); 14 cert.checkValidity(); 15 return cert; 16 } catch (CertificateExpiredException e) { 17 throw new RuntimeException("证书已过期", e); 18 } catch (CertificateNotYetValidException e) { 19 throw new RuntimeException("证书尚未生效", e); 20 } catch (CertificateException e) { 21 throw new RuntimeException("无效的证书文件", e); 22 } finally { 23 bis.close(); 24 } 25} 26

PHP

1 2/** 3* Read certificate from file 4* 5* @param string $filepath PEM encoded X.509 certificate file path 6* 7* @return resource|bool X.509 certificate resource identifier on success or FALSE on failure 8*/ 9public static function getCertificate($filepath) { 10 return openssl_x509_read(file_get_contents($filepath));} 11

为什么平台证书只提供API下载?

主要是为了确保在更换平台证书时,不影响商户使用微信支付的各种功能。以下场景中,微信支付会更换平台证书:

证书到期后,必须更换。(目前是五年)

证书到期前,例行更换。(每年一次)

为什么平台证书下载接口返回的平台证书需要加密?

主要是为了防御“中间人攻击”。

由于验证应答报文的签名和加密敏感信息时,必须使用到平台证书。平台证书是商户认证微信支付身份时最关键的要素。因此,要通过签名和加密等多重机制来保障商户获取到的平台证书没有被“中间人”篡改。

商户在调用下载接口获取平台证书时,应进行以下四步操作,以保证证书的真实性:

使用与平台共享的对称密钥,解密报文中的证书(必须)

通过解密得到的证书,来验证报文的签名(必须)

使用证书查看工具,核对证书的颁发者为Tenpay.com Root CA。(强烈推荐)

通过证书信任链验证平台证书(强烈推荐)

如何通过证书信任链验证平台证书?

下面介绍如何使用openssl工具,通过证书信任链验证平台证书。

首先,从微信支付商户平台下载平台证书信任链 CertTrustChain.p7b ,并将它转换为pem证书格式。

1openssl pkcs7 -print_certs -in CertTrustChain.p7b -inform der -out CertTrustChain.pem 2

然后,-CAfile file指定受信任的证书,验证下载的平台证书

1openssl verify -verbose -CAfile ./CertTrustChain.pem ./WeChatPayPlatform.pem 2

为什么报错“HTTP header缺少微信支付平台证书序列号(Wechatpay-Serial)”?

商户上送敏感信息时使用了微信支付平台公钥加密。为了能使用正确的密钥解密,微信支付要求商户在请求的HTTP头部中包括证书序列号 ,以声明加密所用的密钥对和平台证书。详见的说明。

标签: