微信支付为什么有这么多证书和秘钥

跟微信支付对接的时候,最麻烦的就是各种不同的证书、秘钥、签名,因为涉及了多种不同的场景,容易搞混,所以整理一下。本文针对微信支付V3接口中的安全机制。

证书

证书一般是由CA权威机构颁发,一般包含了网站与公钥的信息,用于创建HTTPS加密连接

商户API证书

微信支付的商户API证书是PKCS12格式,可以提取商户API私钥和证书序列号,也包含了公钥,其中公钥需保存到微信支付后台。

  • 获取方式:需要使用微信支付工具申请获得
  • 使用场景:提取API私钥(商户保存),提取公钥(保存到微信支付),提取序列号(与微信支付协同加解密)

平台证书

微信支付的平台证书跟其他网站的证书不一样,不同商家拿到的证书不同。

  • 获取方式:调用微信支付接口(返回公钥和序列号),私钥肯定是不会给了
  • 使用场景:使用公钥加密敏感信息,比如手机号码;公钥和序列号都是同时使用,如果用到公钥,就需要在头部

私钥

商户API私钥

  • 获取方式:从商户API证书提取
  • 使用场景:请求签名(往微信支付发出的请求,都需要使用该私钥签名),当然同时还需要有证书序列号

平台公钥

  • 获取方式:其实就是平台证书中的一部分
  • 使用场景:商家使用公钥对敏感信息加密,比如手机号码,这样就只有微信支付可以解密,保证了信息的安全

APIv3密钥

这个秘钥比较特别,不是从证书中获取的,而是在微信支付商户平台设置的。只有设置了APIv3秘钥,才可以获取平台证书,平台证书也是加密过的,需要用APIv3秘钥解密

  • 获取方式:微信支付商户平台设置
  • 使用场景:微信回调信息的解密;平台证书的解密

总结

安全主要体现在签名和信息的加密

  • 签名:都是发送方使用己方的私钥签名,接收方使用对应的公钥验证签名
  • 敏感信息的加密:一般使用接收方的公钥加密,接收方使用私钥解密
  • 回调的接口数据加密:因为是微信支付发起的(也就是可能发给多个商家,微信支付也担心发送给了错误接收方,或者商户配置的回调URL错误),为了防止信息被意外泄露,所以还要对内容再做一步对称加密(APIv3秘钥)

参考

  • 证书密钥使用说明

你可能感兴趣的:(微信支付为什么有这么多证书和秘钥)