在配置 Nginx SSL 证书时,如果遇到以下错误:
nginx: [emerg] SSL_CTX_use_PrivateKey failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
这应该是 SSL 证书和私钥之间的公私钥对不匹配。这篇文章就展开地分析这个问题的原因和解决方案。
错误分析
该错误表示 Nginx 在加载私钥时,检测到证书和私钥之间不匹配。常见原因如下:
- 使用了错误的证书文件,如其他域名的证书。
- 在配置时不小心选择了错误的私钥文件。
- 证书或私钥文件被损坏。
- CSR 文件和私钥不匹配。
解决方案
- 检查证书和私钥是否匹配
通过 OpenSSL 命令检查证书和私钥的 MD5 值是否匹配:
查看私钥的 MD5 值:
openssl rsa -noout -modulus -in your_private.key | openssl md5
查看证书的 MD5 值:
openssl x509 -noout -modulus -in your_certificate.crt | openssl md5
CSR 的 MD5 值(如果有):
openssl req -noout -modulus -in your_request.csr | openssl md5
如果 MD5 值不匹配,请确保使用了正确的私钥和证书。
- 检查私钥是否有效
使用下列命令检查私钥是否有效:
openssl rsa -check -in your_private.key
如果私钥损坏,需重新生成私钥和证书。
- 检查证书链是否完整
为了确保证书链完整,可将证书和中间证书合并:
cat your_certificate.crt intermediate_certificate.crt > full_chain.crt
然后在 Nginx 配置文件中指向此合并证书:
ssl_certificate /path/to/full_chain.crt;
ssl_certificate_key /path/to/private.key;
- 重新生成 CSR 和私钥
如果不能确保证书和私钥是否一致,可考虑重新生成 CSR 和私钥:
生成新的私钥:
openssl genrsa -out new_private.key 2048
生成 CSR:
openssl req -new -key new_private.key -out new_request.csr
然后将 CSR 提交给 CA (证书授权机构),以获取新证书。
- 检查 Nginx 配置
确保配置文件中指向正确的证书和私钥路径,如在 Nginx 中的配置示例:
ssl_certificate /etc/nginx/ssl/full_chain.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
配置保存后,重启 Nginx:
sudo nginx -t
sudo systemctl reload nginx
这个错误通常是由于证书和私钥不匹配或配置错误导致。通过检查证书和私钥的 MD5 值、检查配置文件和确保证书链完整,可以解决这个问题。
发表评论
沙发空缺中,还不快抢~