SSL:错误:0B080074:x509证书例程:X509_check_private_key:键值不匹配

时间:2014-10-04 09:30:03

标签: ssl nginx openssl certificate key

我无法设置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和 指令指向正确的私钥和证书。

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

感谢您的帮助。 :)

15 个答案:

答案 0 :(得分:145)

一旦你确定他们不匹配,你仍然有问题 - 如何处理它。通常,证书可能仅仅是错误地组装。当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

在顶部附近,您应该看到"主题:"然后看起来像你的数据的东西。如果它看起来像你的CA,你的包可能是错误的顺序;您可以尝试进行备份,然后将最后一个证书移到开头,希望这是您的证书。

如果这不起作用,您可能只需要重新颁发证书。当我创建CSR时,我喜欢清楚地标记它所使用的服务器(而不仅仅是ssl.key或server.key)并使用名称中的日期复制它,例如mydomain.20150306.key他们的私钥和公钥对不太可能与另一套混在一起。

答案 1 :(得分:58)

  1. 确保您的证书和密钥是PEM格式。如果没有,则使用openssl命令
  2. 转换它们
  3. 检查公钥的MD5哈希,确保它与私钥中的内容匹配

    openssl x509 -noout -modulus -in certificate.crt | openssl md5

    openssl rsa -noout -modulus -in privateKey.key | openssl md5

答案 2 :(得分:30)

  

我得到了一个MD5哈希,其中包含密钥和证书的不同结果。

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

模数应匹配。确保你有正确的钥匙。

答案 3 :(得分:19)

我遇到了这个问题,因为我以错误的顺序添加了捆绑包和证书,因此也许可以帮助其他人。

之前(这是错误的):

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 manpage

  

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

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

答案 4 :(得分:8)

如果发生这种情况并且您使用的是加密/证书服务器,原因很可能是您使用的是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 “Where are my certificates?”

答案 5 :(得分:3)

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

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

我通过将有问题的证书文件与工作证书文件进行比较来意识到这个问题。

答案 6 :(得分:1)

在我的情况下,我想要更改ssl证书,因为我已经更改了我的服务器,所以我不得不用这个命令创建一个新的csr:

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

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

(SSL:错误:0B080074:x509证书例程:X509_check_private_key:键值不匹配)

经过大量调查,错误是密钥文件中的模块与crt文件中的模块不一样

所以,为了使它工作,我创建了一个新的csr文件,但我用这个命令更改了文件的名称

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

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

答案 7 :(得分:1)

我在问题上的5美分:

我有同样的问题。大约1个小时后照顾它,我发现我错误地粘贴了证书。

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

答案 8 :(得分:0)

当您的CA颁发中间证书

时,也会发生这种情况

我使用nginx遇到了这个问题(两次),这篇文章中的解决方案都没有解释这个问题。这篇由一位名叫Marco的好绅士发布的博客文章将它钉在了这里,我将它粘贴在这里也适合那些也遇到我所看到的人。 https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

就我而言,go-daddy是CA,这特定于他们如何颁发证书和中间证书捆绑包。

以下是Marco博客文章

的摘录

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

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

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

答案 9 :(得分:0)

对于Nginx;

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

2- SSL文件domain_com.crt和domain_com.ca-bundle文件将新文件复制到粘贴domain.com.chained.crt

3-添加nginx文件:     一种。 ssl_certificate /home/user/domain_ssl/domain.com.chained.crt;     b。 ssl_certificate_key /home/user/domain_ssl/domain.com.key;

晚些时候重新启动Nginx

答案 10 :(得分:0)

在我的情况下,问题在于我创建证书时没有在cli界面中输入任何数据。当我重新生成证书并迷恋所有领域时:城市,州等一切都变得正常了。

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

答案 11 :(得分:0)

当我将bundle.crt和主证书结合在一起时,这发生在我身上。原因是我将主要证书复制到bundle.crt下面。应该是相反的方式

1 /主证书 2 / bundle.crt

答案 12 :(得分:0)

SL_CTX_use_PrivateKey(“ / etc / nginx / ssl / file”)失败(SSL:错误:0B080074:x509证书例程:X509_check_private_key:密钥值不匹配)

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

检查Nginx错误日志以获取更多详细信息(例如/var/log/nginx/error.log)。

答案 13 :(得分:0)

就我而言,我必须连接我域的证书。

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

答案 14 :(得分:0)

我在 Nginx 上遇到了同样的问题,但下面帮我解决了。

我已经删除了这个包并用 crt 文件更新了它。

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

该捆绑包不是 100% 必要的,但它提高了兼容性。