首页 文章

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

提问于
浏览
74

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

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

谢谢您的帮助 . :)

12 回答

  • 8

    如果发生这种情况并且您正在使用Let的加密/ 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 “Where are my certificates?”

  • 3

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

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

    我通过比较有问题的证书文件和工作证书文件来实现这个问题 .

  • 144

    我有这个问题,因为我是以错误的顺序添加捆绑和证书,所以这可能会帮助其他人 .

    之前(这是错误的):

    cat ca_bundle.crt certificate.crt > bundle_chained.crt

    之后(这是对的)

    cat certificate.crt ca_bundle.crt > bundle_chained.crt

    并且请不要忘记更新相应的conf(ssl_certificate现在必须指向链接的crt)as

    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)
    
  • 0

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

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

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

  • 0

    一旦你确定他们不匹配,你仍然有一个问题 - 如何处理它 . 通常,证书可能仅仅是错误地组装 . 当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等 . 他们的私钥和公钥对不太可能与另一套混在一起 .

  • 0
    • 确保您的证书和密钥是PEM格式 . 如果没有,则使用openssl命令转换它们

    • 检查公钥的MD5哈希,以确保它与私钥中的内容匹配

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

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

  • 29

    在我的情况下,我想要更改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就可以了 .

  • 57

    我在问题上的5美分:

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

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

  • 1

    当您的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

  • 14

    对于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文件:a . ssl_certificate /home/user/domain_ssl/domain.com.chained.crt;湾ssl_certificate_key /home/user/domain_ssl/domain.com.key;

    Lates重新启动Nginx

  • 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
    
  • 1

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

    1 /主证书2 / bundle.crt

相关问题