# 证书私钥匹配检查：证书和私钥是不是一对

> 比较公钥，检查证书、CSR 和私钥是否属于同一密钥对，全程在浏览器本地完成，解决 nginx key values mismatch。

Source: https://ssl.sh/zh/tools/key-matcher/
Last updated: 2026-11-10

粘贴证书、CSR、私钥中的任意两样，检查它们的公钥是否相同。本地运行，私钥不上传。

私钥匹配工具告诉你证书、CSR 和私钥是否属于同一对密钥。任选两样或三样都粘贴，点 **比较**，工具会从每一项里取出公钥比对，直接给出“匹配”或“不匹配”。比较在浏览器里完成，私钥不会上传。

## 怎么用

1. 粘贴证书（`BEGIN CERTIFICATE`）、CSR（`BEGIN CERTIFICATE REQUEST`）和/或私钥（`BEGIN PRIVATE KEY`、`BEGIN RSA PRIVATE KEY` 或 `BEGIN EC PRIVATE KEY`），也可以选择文件。
2. 私钥有密码就填上。
3. 点 **比较**。每一行显示密钥类型和公钥的 SHA-256 哈希，哈希相同就是一对。

## 什么时候用

- Nginx 启动失败，报 `SSL_CTX_use_PrivateKey ... key values mismatch`（见 [nginx key values mismatch](https://ssl.sh/zh/errors/nginx-key-values-mismatch/)）。
- Apache 日志出现 `AH02565: Certificate and private key ... do not match`。
- 宝塔面板保存 SSL 时报证书和密钥不匹配，或者阿里云、腾讯云上传证书时提示私钥与证书不匹配。
- 续期后服务器上有好几个 `.key`，不确定哪个是现在用的。

## 匹配原理

RSA 密钥比较模数，ECDSA 密钥比较曲线和公钥点，Ed25519 比较 32 字节公钥。私钥的公钥是从私钥数据里推导出来的。显示的哈希是 SubjectPublicKeyInfo 的 SHA-256，和 TLSA `3 1 1` 记录用的是同一个值。

## 不匹配怎么办

最常见的原因是证书是用另一份 CSR 申请的，或者后来重新生成 CSR 时把私钥文件覆盖了。在云平台申请证书时如果选了“系统生成 CSR”，私钥要在平台的下载包里找，而不是用你自己服务器上的。实在找不到原来的私钥，就用 [CSR 生成器](https://ssl.sh/zh/tools/csr-generator/)重新生成私钥和 CSR，请 CA 重新签发（大多数 CA 支持免费重签）。


## FAQ

**为什么比较公钥，而不是比较域名？**

域名在很多证书和私钥上都可能一样，只有公钥能把证书和私钥绑定起来。公钥不同，服务器就完成不了握手。

**服务器上有好几个 .key 文件，怎么找到对的那个？**

证书粘贴一次，私钥逐个试；或者在服务器上比较哈希：openssl x509 -noout -pubkey -in cert.pem | openssl sha256 和 openssl pkey -pubout -in key.pem | openssl sha256，结果相同的就是一对。

**加密的私钥能检查吗？**

能。支持加密的 PKCS #8（BEGIN ENCRYPTED PRIVATE KEY）和旧式加密的 RSA 私钥，输入密码即可，密码只在你的浏览器里使用。
