证书与私钥配对校验
nginx 报 key values mismatch、Apache 报 certificate and private key do not match,都是证书和私钥对不上。原理很简单:私钥能推出公钥,证书和 CSR 里也都带着公钥,三者的公钥指纹一致就是同一把钥匙。粘两份或三份进来即可,私钥全程只在你的浏览器里解析,不会发到服务器。
对不上时怎么查
- 最常见:拿错了文件
- 同一个域名前后申请过几次,每次的私钥都不一样。按修改时间找到与证书同一批生成的那个 .key,别凭文件名猜。
- 次常见:只换了证书没换私钥
- 续期时如果重新生成了 CSR,私钥也是新的,两个都要换。用同一份 CSR 续签才能沿用旧私钥。
- 文件被编辑器改坏
- PEM 对换行敏感,用 Windows 记事本粘贴、或者被转成 CRLF、丢了结尾换行,都可能解析失败。建议用
cat直接看,或走 证书格式转换 重新规范化一遍。 - 私钥带密码
- 看到
ENCRYPTED PRIVATE KEY或Proc-Type: 4,ENCRYPTED就是加密私钥,本工具读不了,先解密:openssl pkcs8 -in key.pem -out plain.pem。 - 命令行等价做法
- 三条命令输出一样就是配对的:
openssl x509 -in cert.pem -noout -pubkey | openssl sha256
openssl pkey -in key.pem -pubout | openssl sha256
openssl req -in req.csr -noout -pubkey | openssl sha256