Error: 0B080074: x509 certificate routines: X509_check_private_key: key value mismatch

我无法设置 SSL。我谷歌了一下,找到了一些解决方案,但没有一个对我有用。我需要帮助。

下面是我尝试重新启动 nginx 时得到的错误:

root@s17925268:~# service nginx restart
Restarting nginx: nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/conf.d/ssl/ssl.key") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
nginx: configuration file /etc/nginx/nginx.conf test failed

我的证书来自 StartSSL,有效期为1年。

以下是我的测试结果:

  • 证书和私钥没有尾随空间。
  • 我没有使用默认的 server.key 文件。
  • 我检查了 nginx.conf 和 指针指向正确的私钥和证书。

我还检查了模数,得到了钥匙和证书的不同模数。

谢谢你的帮助。 :)

221668 次浏览
  1. 确保您的证书和密钥是 PEM 格式的。如果不是,那么使用 openssl 命令转换它们
  2. 检查公钥的 MD5散列,以确保它与私钥中的散列匹配

    openssl x509 -noout -modulus -in certificate.crt | openssl md5
    openssl rsa -noout -modulus -in privateKey.key | openssl md5
    

我得到了一个 MD5散列,它对密钥和证书都有不同的结果。

这就说明了一切。您的密钥和证书不匹配。

弹性模量应该匹配。请确保您有正确的关键。

一旦你确定它们不匹配,你仍然有一个问题——该怎么办。通常,证书可能仅仅是装配错误。当 CA 为您的证书签名时,它们会向您发送一个类似于

-----BEGIN CERTIFICATE-----
MIIAA-and-a-buncha-nonsense-that-is-your-certificate
-and-a-buncha-nonsense-that-is-your-certificate-and-
a-buncha-nonsense-that-is-your-certificate-and-a-bun
cha-nonsense-that-is-your-certificate-and-a-buncha-n
onsense-that-is-your-certificate-AA+
-----END CERTIFICATE-----

他们还会向您发送一个包(通常是两个证书) ,代表他们授予您证书的权限。这看起来就像

-----BEGIN CERTIFICATE-----
MIICC-this-is-the-certificate-that-signed-your-request
-this-is-the-certificate-that-signed-your-request-this
-is-the-certificate-that-signed-your-request-this-is-t
he-certificate-that-signed-your-request-this-is-the-ce
rtificate-that-signed-your-request-A
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICC-this-is-the-certificate-that-signed-for-that-one
-this-is-the-certificate-that-signed-for-that-one-this
-is-the-certificate-that-signed-for-that-one-this-is-t
he-certificate-that-signed-for-that-one-this-is-the-ce
rtificate-that-signed-for-that-one-this-is-the-certifi
cate-that-signed-for-that-one-AA
-----END CERTIFICATE-----

除了不幸的是,他们不会被这么清楚地标记。

因此,通常的做法是将这些内容捆绑到一个文件中——您的证书,然后是签名证书。但是由于它们不容易区分,有时会发生有人不小心把它们放在另一个顺序——签署证书,然后是最后的证书——而没有注意到。在这种情况下,您的证书将与您的密钥不匹配。

可以通过运行

openssl x509 -noout -text -in yourcert.cert

在顶部附近,您应该看到“ Subject:”,然后填充看起来像您的数据的内容。如果它看起来像您的 CA,那么您的 bundle 的顺序可能是错误的; 您可以尝试进行备份,然后将最后一个证书移动到开头,希望它就是您的证书。

如果这不起作用,你可能需要重新发行证书。当我创建 CSR 时,我喜欢清楚地标明它的服务器(而不仅仅是 ssl.key 或 server.key) ,并在名称中添加日期,如 mydomain。20150306。这样它们的私钥和公钥对就不太可能与另一个集合混淆。

如果发生这种情况,并且您正在使用 Let’s Encrypt/certbot,原因很可能是您使用的是 chain.pem而不是 fullchain.pem

应该是这样的:

ssl_certificate /etc/certbot/live/example.com/fullchain.pem;
ssl_certificate_key /etc/certbot/live/example.com/privkey.pem;

参见 Certbot docs“我的证书在哪里?”

在我的例子中,我想要更改 SSL 证书,因为我已经更改了我的服务器,所以我必须使用以下命令创建一个新的 CSR:

 openssl req -new -newkey rsa:2048 -nodes -keyout mysite.key -out mysite.csr

我已经将 mysite.csr 文件发送给公司的 SSL 提供程序,在收到证书 crt 之后,我重新启动了 nginx,我得到了这个错误

 (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)

经过大量的调查,发现密钥文件中的模块与 crt 文件中的模块不一致

因此,为了使它工作,我已经创建了一个新的 csr 文件,但我必须用这个命令更改文件的名称

 openssl req -new -newkey rsa:2048 -nodes -keyout mysite_new.key -out mysite_new.csr

然后我从公司提供商那里收到了一个新的 crt 文件,重新启动 nginx,它工作了。

我对这个问题的看法是:

我也遇到了同样的问题。大约一个小时后,我发现我粘贴的证书是错误的。

如果您有这样的错误,请检查您的证书。

我遇到了同样的问题,最终通过更改证书文件中 pem 块的顺序解决了这个问题。

Cert 块应该放在文件的开头,然后是中间块,然后是根块。

我通过比较有问题的证书文件和工作证书文件来认识到这个问题。

这也可能发生在您的 CA 颁发中间证书时

我在 nginx 上遇到过这个问题(两次) ,本文中没有一个解决方案解释这个问题。这是一位名叫马可的绅士写的博客文章,我把它粘贴到这里,希望大家也能看到我看到的东西。https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

在我的例子中,go-dad 是 CA,这是特定于他们如何发布 cert 和中间 cert 包的。

以下是马可博客文章的摘录

使用 Nginx,如果 CA 包含中间证书,则必须创建一个链式证书文件,其中包含证书和 CA 的中间证书。

您可以使用这个命令创建一个名为 example.com.chained.crt 的组合文件:

cat example.com.crt intermediate.crt > example.com.chained.crt

对于 Nginx:

  1. openssl req -newkey rsa:2048 -nodes -keyout domain.com.key -out domain.com.csr

  2. SSL 文件 domain_com.crtdomain_com.ca-bundle文件,然后复制新文件粘贴 domain.com.chained.crt

3: 添加 nginx 文件:

  1. ssl_certificate /home/user/domain_ssl/domain.com.chained.crt;
  2. ssl_certificate_key /home/user/domain_ssl/domain.com.key;

后期重启 Nginx。

我有这个问题,因为我正在添加捆绑包和证书在错误的顺序,所以也许这可以帮助别人。

之前(这是错误的) :

cat ca_bundle.crt certificate.crt > bundle_chained.crt

之后(这是正确的)

cat certificate.crt ca_bundle.crt > bundle_chained.crt

请不要忘记更新适当的 conf (ssl _ certificate 现在必须指向链式 crt)

server {
listen              443 ssl;
server_name         www.example.com;
ssl_certificate     bundle_chained.crt;
ssl_certificate_key www.example.com.key;
...
}

来自 Nginx 手册:

如果服务器证书和捆绑包以错误的顺序连接, Nginx 将无法启动,并显示错误消息:

SSL_CTX_use_PrivateKey_file(" ... /www.example.com.key") failed
(SSL: error:0B080074:x509 certificate routines:
X509_check_private_key:key values mismatch)

我的情况下的问题是,我没有输入任何数据在 cli 接口的 cretead 服务证书。当我再生证书并进入所有领域: 城市,国家等都变得很好。

 sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

当我把 bundle.crt 和 main cert 结合起来的时候,就发生了这种情况。原因是我复制了 bundle.crt 下面的主证书。应该是反过来的

1/主要证书 2/bundle.crt

SL _ CTX _ use _ PrivateKey (“/etc/nginx/SSL/file”)失败(SSL: error: 0B080074: x509证书例程: X509 _ check _ private _ key: key value mismatch)

当证书私钥(例如 .key.pem文件)与 Nginx 配置中的公共证书文件(ssl_certificate)不匹配时(检查 nginx.confsites-enabled/) ,可能会发生此错误。确保两个文件都匹配。

查看 Nginx 错误日志了解更多细节(例如 /var/log/nginx/error.log)。

在我的情况下,我必须连接我的域的证书。

cat myDomain.crt EntityCertCA.crt TrustedRoot.crt > bundle.crt

在配置文件/etc/nginx/nginx.conf 中

 ssl_certificate "/etc/pki/nginx/bundle.crt";

重新启动服务,一切正常。

systemctl restart nginx.service

资料来源步骤2: https://www.namecheap.com/support/knowledgebase/article.aspx/9781/2238/nginx-ssl-error0b080074x509-certificate-routines-x509checkprivatekeykey-values-mismatch

我在 Nginx 上也有同样的问题,但是下面帮助我解决了它。

我已经删除了这个包,并用 crt 文件对其进行了更新。

ssl_certificate /path/to/cert.crt;
ssl_certificate_key /path/to/key.key;

这个包不是100% 必需的,但是它提高了兼容性。

对于 AWS s3或使用 aws s3 syncaws s3 cp

有时候 s3会损坏小文件(比如证书)

在上传证书之前将其压缩

sudo apt install zip   # Installs the zip package
sudo apt install unzip # Installs the unzip package


zip certificates.zip default.key default.crt

然后拉开拉链

sudo unzip -o /var/app/s3/certificates.zip

在我的例子中,私钥文件最后有一个下一行字符。

格式不正确:

-----END PRIVATE KEY-----


正确格式:

-----END PRIVATE KEY-----

是的,顺序应该是 cat certificate.crt ca_bundle.crt > bundle_chained.crt和 ca _ bundle 的第一行。Crt 不应该位于 certificate. crt 的最后一行。

格式不正确:

-----END CERTIFICATE----------BEGIN CERTIFICATE-----

正确格式:

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----