Nginx 配置证书时报错:SSL_CTX_use_PrivateKey failed

在配置 Nginx SSL 证书时,如果遇到以下错误:

nginx: [emerg] SSL_CTX_use_PrivateKey failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)

这应该是 SSL 证书和私钥之间的公私钥对不匹配。这篇文章就展开地分析这个问题的原因和解决方案。

错误分析

该错误表示 Nginx 在加载私钥时,检测到证书和私钥之间不匹配。常见原因如下:

  1. 使用了错误的证书文件,如其他域名的证书。
  2. 在配置时不小心选择了错误的私钥文件。
  3. 证书或私钥文件被损坏。
  4. CSR 文件和私钥不匹配。

解决方案

  1. 检查证书和私钥是否匹配

通过 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 值不匹配,请确保使用了正确的私钥和证书。

  1. 检查私钥是否有效

使用下列命令检查私钥是否有效:

openssl rsa -check -in your_private.key

如果私钥损坏,需重新生成私钥和证书。

  1. 检查证书链是否完整

为了确保证书链完整,可将证书和中间证书合并:

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;
  1. 重新生成 CSR 和私钥

如果不能确保证书和私钥是否一致,可考虑重新生成 CSR 和私钥:

生成新的私钥:

openssl genrsa -out new_private.key 2048

生成 CSR:

openssl req -new -key new_private.key -out new_request.csr

然后将 CSR 提交给 CA (证书授权机构),以获取新证书。

  1. 检查 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 值、检查配置文件和确保证书链完整,可以解决这个问题。

发表评论

发表评论

*

沙发空缺中,还不快抢~