---
title: "微信支付通讯安全：APIv3 的公钥与私钥"
date: 2023-01-24T09:32:50.000Z
author: Z.SHINCHVEN
tags: [WeChat Pay]
canonical: https://atlassc.net/2023/01/24/the-public-and-private-keys-of-wechat-pay
---
## 前言

微信支付 APIv3 默认使用证书进行签名及验签，以保证数据传输的安全性，防止被篡改或者伪造，尤其是防止 `重放攻击`。

## 公钥与私钥并不是一对

与直观感受不同，微信支付 APIv3 的公钥与私钥并不是一对，它们甚至有不同的 Serial No。

- `私钥`：是指商户调用 API 时用于签名的 [`商户 API 证书`](https://pay.weixin.qq.com/docs/merchant/development/interface-rules/privatekey-and-certificate.html#:~:text=%23-,%E5%95%86%E6%88%B7%20API%20%E8%AF%81%E4%B9%A6,-%E5%95%86%E6%88%B7API) 的 `Private Key`。它需要商户从微信支付商户平台申请与下载。

- `公钥`：是商户用于校验微信支付 APIv3 `接口响应` 或 `回调通知` 时的 [`微信支付平台证书`](https://pay.weixin.qq.com/docs/merchant/development/interface-rules/privatekey-and-certificate.html#:~:text=%23-,%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E5%B9%B3%E5%8F%B0%E8%AF%81%E4%B9%A6,-%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98) 的 `Public Key` 的。它需要商户调用 APIv3 的 `/v3/certificates` 接口获取。

## 商户 API 证书与微信支付平台证书的区别

1. **商户API证书（从微信支付后台下载）**：
      - **用途**：这个证书主要用于商户服务器与微信支付服务器之间的双向身份验证。在发送API请求给微信支付时，商户服务器使用此证书对请求进行签名，以证明其身份。同时，微信支付服务器也会使用此证书来验证请求的合法性。
      - **内容**：包含商户的 `私钥` 和 `公钥`。
      - **安全性**：私钥需要严格保密，不应外泄。
2. **微信支付平台证书（通过 `/v3/certificates` 接口获取）**：
      - **用途**：这个证书主要用于验证微信支付服务器返回数据的签名。当微信支付服务器返回数据时，会附上由微信支付私钥签名的信息。商户服务器需要使用微信支付的公钥证书来验证这个签名的有效性，以确保数据的真实性和完整性。
      - **内容**：仅包含微信支付的 `公钥`。
      - **更新**：微信支付可能会不定期更新其平台证书，因此商户需要定期通过 `/v3/certificates` 接口获取最新的证书。
