SSL:错误:0B080074:x509证书例程:X509_check_private_key:键值不匹配
我无法设置SSL。 我谷歌search,我find了一些解决scheme,但没有一个为我工作。 我需要一些帮助,请…
这是我尝试重新启动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年。
以下是我testing的内容:
- 证书和私钥没有尾随空格。
- 我没有使用默认的server.key文件。
- 我检查了nginx.conf,指令指向正确的私钥和证书。
我也检查了模数,我得到了一个不同的密钥和证书模数。
感谢您的帮助。 🙂
对于密钥和证书,我得到了不同结果的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-----
除了不幸的是,他们不会那么清楚地标记。
那么一种常见的做法就是把这些都整合到一个文件中 – 你的证书,然后是签名证书。 但是由于不容易辨别,有时偶然会有人不小心把它们放在另一个订单上 – 签发证书,然后是最后的证书 – 而不会注意到。 在这种情况下,您的证书将不符合您的密钥。
您可以通过运行来testingcertificate它认为它代表了什么
openssl x509 -noout -text -in yourcert.cert
在顶部,你应该看到“主题:”,然后看起来像你的数据。 如果相反,它看起来像你的CA,你的包可能是错误的顺序; 你可以尝试做一个备份,然后把最后一个证书移到开头,希望这是你的证书。
如果这不起作用,您可能只需要重新颁发证书。 当我制作一个CSR时,我想清楚地标明它的服务器(而不是ssl.key或server.key),并用名称中的date复制它,例如mydomain.20150306.key等他们的私钥和公钥对不太可能与另一组混合。
- 确保您的证书和密钥是PEM格式。 如果不是,则使用openssl命令转换它们
-
检查公钥的MD5哈希以确保它与私钥中的内容匹配
openssl x509 -noout -modulus -in certificate.crt | openssl md5
openssl rsa -noout -modulus -in privateKey.key | openssl md5
如果发生这种情况而且您使用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文档“我的证书在哪里?”
在我的情况下,我想改变ssl证书,因为我改变了我的服务器,所以我不得不用这个命令创build一个新的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文件的模块不一样
所以,为了使它工作,我创build了一个新的csr文件,但是我用这个命令改变了文件的名字
$ openssl req -new -newkey rsa:2048 -nodes -keyout mysite_new.key -out mysite_new.csr
然后,我从公司提供商收到一个新的crt文件,重新启动nginx,它工作。
我在这个问题上的5美分:
我有同样的问题。 大约1小时后,我发现我错误地粘贴了证书。