SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch问题解决

本文详细介绍了在Nginx中遇到SSL_CTX_use_PrivateKey_file失败的具体原因及解决办法,包括如何检查并确保私钥与证书的一致性。

今天把服务器上的nginx关闭再启动, 发现了如下问题:

[root@PUS*-021 ssl.key]# nginx -c /opt/nginx-conf/poll.conf 
nginx: [emerg] SSL_CTX_use_PrivateKey_file("/usr/local/nginx/ssl/ssl.key/****.com.20160503.key") failed 
(SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)

这个错误很明显,意思是说私钥与证书不匹配。

一般来讲,我们拿到的官方证书,不是最终的证书,而是一个中间证书intermediate.crt和一个根证书,需要我们把两个证书合成一个最终的证书,这里如果顺序错误,就会出现这里所说的一个问题。另外有可能就是在复制证书内容合并的时候,证书末尾的字母后面有空格。为了避免空格出现,可以通过cat root.crt intermediate.crt > ca_****.crt来生成证书。

知道证书的问题在哪里,就很好解决了。我这里是生成证书时,两个证书的顺序刚好搞反了,变更顺序即可。

另外生成证书,可以通过如下openssl自带的工具检测私钥与证书是否匹配。

[root@PUS*-021 ssl]# openssl x509 -noout -modulus -in ssl.crt/ca_****.crt | openssl md5
(stdin)= 8216eeaa8e1a346dd1f5dfecaadfec1d
[root@PUS*-021 ssl]# openssl rsa -noout -modulus -in ssl.key/****.com.20160503.key | openssl md5
(stdin)= 8216eeaa8e1a346dd1f5dfecaadfec1d

如果两个结果一致,则表明私钥和证书是匹配的,可以正确启动nginx。

<think>首先,用户的问题是关于错误代号 "error:0b000074:X.509 certificate routines:OPENSSL_internal:KEY_VALUES_MISMATCH" 的解决方案。错误信息表明私钥和证书不匹配。 从用户提供的参考文献来看: - 引用[1]提到错误是因为私钥和SSL证书文件的私钥部分不匹配,提供了检查命令。 - 引用[2]到[5]都确认了这个错误是由于私钥文件(.key)和证书文件(.crt或.pem)不匹配引起的,并给出了相同的检查方法:使用OpenSSL命令计算两者的Modulus MD5值并比较。 步骤分解: 1. **理解错误原因**:错误明确指出私钥与证书不匹配,最常见的原因是配置错误,比如指定了错误的私钥文件或证书文件。 2. **验证方法**: - 使用命令检查证书的Modulus MD5:`openssl x509 -noout -modulus -in cert.crt | openssl md5` - 使用命令检查私钥的Modulus MD5:`openssl rsa -noout -modulus -in cert.key | openssl md5` - 如果两个MD5值相同,则匹配;否则不匹配。 3. **解决方案**: - 如果不匹配,重新生成证书请求(CSR)并重新签发证书,确保使用正确的私钥。 - 或者,确认配置文件中指定的路径正确无误。 回答结构: - 按照系统指令,使用中文。 - 确保行内数学表达式用$...$,但由于这个问题不涉及数学公式,可能不需要用到。 - 独立公式单独成段,如果需要,但这里可能也不需要。 - LaTeX语法正确,但问题中不涉及复杂公式。 - 生成相关问题。 - 引用末尾添加[^n]标识,引用来自用户提供的引用。 用户引用了多个来源,但都是关于同一个错误的不同描述和解决方案。核心解决方案是一致的:检查并确保私钥和证书匹配。 回答步骤: 1. 解释错误原因。 2. 提供验证步骤。 3. 给出解决方案。 4. 生成相关问题。 引用管理: - 用户在查询中引用了[^1]到[^5],我应该引用这些来源。 - 在我的回答中,末尾添加引用标识,比如提到验证方法时引用[^1],解决方案引用[^2]-[^5]。 最终回答结构: - 开头:解释错误。 - 中间:详细步骤验证和解决。 - 结束:生成相关问题。 - 引用:在相关部分添加[^n]。 相关问题生成: 基于主题,生成几个相关问题: 1. 如何生成匹配的私钥和证书? 2. 除了MD5比较,还有其他方式验证SSL证书和私钥匹配吗? 3. Nginx配置SSL证书时有什么注意事项? 4. 如何解决其他常见SSL错误? 5. 更新SSL证书的最佳实践是什么? </think>### 错误 "error:0b000074:X.509 certificate routines:OPENSSL_internal:KEY_VALUES_MISMATCH" 的解决方案 该错误表明您的 SSL 证书文件(如 `.crt` 或 `.pem`)与私钥文件(如 `.key`)不匹配。这通常发生在 Nginx 或其他 Web 服务器配置 SSL/TLS 时,原因包括证书文件更新后未同步私钥、路径配置错误或证书签发时使用了不匹配的私钥[^1][^2][^3]。以下是逐步解决方法: #### 步骤 1: 验证私钥与证书是否匹配 使用 OpenSSL 命令计算两者的 MD5 哈希值并进行比较: - **检查证书文件的 Modulus MD5**: ```bash openssl x509 -noout -modulus -in /path/to/your_cert.crt | openssl md5 ``` (将 `/path/to/your_cert.crt` 替换为您的证书文件实际路径) - **检查私钥文件的 Modulus MD5**: ```bash openssl rsa -noout -modulus -in /path/to/your_key.key | openssl md5 ``` (将 `/path/to/your_key.key` 替换为您的私钥文件实际路径) - **比较结果**: - 如果两个命令输出的 MD5 值相同(如 `(stdin)= abcd1234...`),说明匹配[^1][^4][^5]。 - 如果不同,则文件不匹配,需执行步骤 2。 #### 步骤 2: 解决不匹配问题 - **重新生成证书**: 1. 用原始私钥重新生成证书签名请求(CSR): ```bash openssl req -new -key /path/to/your_key.key -out /path/to/new.csr ``` 2. 将 CSR 提交给证书颁发机构(CA)重新签发证书。 3. 获取新证书后,替换原有文件。 - **检查文件路径**: 确保 Nginx 配置文件(如 `nginx.conf`)中指定的证书和私钥路径正确无误。示例配置: ```nginx server { listen 443 ssl; ssl_certificate /correct/path/to/your_cert.crt; # 检查路径 ssl_certificate_key /correct/path/to/your_key.key; # 检查路径 ... } ``` - **重新加载 Nginx**: 修改后,重新加载配置(避免重启服务中断): ```bash nginx -s reload ``` 如果仍报错,使用 `nginx -t` 测试配置文件语法。 #### 步骤 3: 预防措施 - 定期使用步骤 1 的命令验证文件匹配性。 - 更新证书时,确保使用与私钥匹配的 CSR。 - 备份文件后再操作,避免配置错误[^2][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值