微信支付为什么有这么多证书和秘钥
2021-05-28 本文已影响0人
十毛tenmao
跟微信支付对接的时候,最麻烦的就是各种不同的证书、秘钥、签名,因为涉及了多种不同的场景,容易搞混,所以整理一下。本文针对微信支付V3接口中的安全机制。
证书
证书一般是由CA权威机构颁发,一般包含了网站与公钥的信息,用于创建HTTPS加密连接
商户API证书
微信支付的商户API证书是PKCS12格式,可以提取商户API私钥和证书序列号,也包含了公钥,其中公钥需保存到微信支付后台。
- 获取方式:需要使用微信支付工具申请获得
- 使用场景:提取API私钥(商户保存),提取公钥(保存到微信支付),提取序列号(与微信支付协同加解密)
平台证书
微信支付的平台证书跟其他网站的证书不一样,不同商家拿到的证书不同。
- 获取方式:调用微信支付接口(返回公钥和序列号),私钥肯定是不会给了
- 使用场景:使用公钥加密敏感信息,比如手机号码;公钥和序列号都是同时使用,如果用到公钥,就需要在头部
私钥
商户API私钥
- 获取方式:从商户API证书提取
- 使用场景:请求签名(往微信支付发出的请求,都需要使用该私钥签名),当然同时还需要有证书序列号
平台公钥
- 获取方式:其实就是平台证书中的一部分
- 使用场景:商家使用公钥对敏感信息加密,比如手机号码,这样就只有微信支付可以解密,保证了信息的安全
APIv3密钥
这个秘钥比较特别,不是从证书中获取的,而是在微信支付商户平台设置的。只有设置了APIv3秘钥,才可以获取平台证书,平台证书也是加密过的,需要用APIv3秘钥解密
- 获取方式:微信支付商户平台设置
- 使用场景:微信回调信息的解密;平台证书的解密
总结
安全主要体现在签名和信息的加密
- 签名:都是发送方使用己方的私钥签名,接收方使用对应的公钥验证签名
- 敏感信息的加密:一般使用接收方的公钥加密,接收方使用私钥解密
- 回调的接口数据加密:因为是微信支付发起的(也就是可能发给多个商家,微信支付也担心发送给了错误接收方,或者商户配置的回调URL错误),为了防止信息被意外泄露,所以还要对内容再做一步对称加密(APIv3秘钥)