在配置 Nginx SSL 证书时,如果遇到以下错误:
nginx: [emerg] SSL_CTX_use_PrivateKey failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
这应该是 SSL 证书和私钥之间的公私钥对不匹配。这篇文章就展开地分析这个问题的原因和解决方案。
该错误表示 Nginx 在加载私钥时,检测到证书和私钥之间不匹配。常见原因如下:
通过 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 和私钥:
生成新的私钥:
openssl genrsa -out new_private.key 2048
生成 CSR:
openssl req -new -key new_private.key -out new_request.csr
然后将 CSR 提交给 CA (证书授权机构),以获取新证书。
确保配置文件中指向正确的证书和私钥路径,如在 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 值、检查配置文件和确保证书链完整,可以解决这个问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。