SSL:エラー:0B080074:x509証明書ルーチン:X509_check_private_key:key値の不一致


99

SSLをセットアップできません。私はGoogleを使ってみましたが、いくつかの解決策を見つけましたが、どれもうまくいきませんでした。助けが必要です...

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を確認したところ、ディレクティブが正しい秘密鍵と証明書を指している。

モジュラスもチェックしましたが、キーと証明書の両方で異なるモジュラスを取得しました。

ご協力ありがとうございました。:)

回答:


36

キーと証明書の両方で異なる結果のMD5ハッシュを取得しました。

これはすべてを言います。キーと証明書が一致していません。

係数は一致する必要があります。正しいキーを持っていることを確認してください。


私が何かを見落としているのでない限り、公開鍵と秘密鍵(証明書ファイルと鍵ファイル)は絶対に違うものにしたいと思っています。
Mark Berry、

1
modulus' and the キーと証明書の公開指数部分は一致している必要があります。間違いなくファイルは異なります。キーは特定の1つの証明書に対して生成されます。
dev0z

私の悪い。私は彼がファイルのMD5を参照していると思いました。証明書に個別のモジュラス関数があることがわかり ました。秘密キーのモジュラスが、インストール前にSSL / TLS証明書の公開キーのモジュラスと一致することを確認するにはどうすればよいですか?
Mark Berry、

165

それらが一致しないことを確認した後も、問題が発生します-それに対して何をすべきか。多くの場合、証明書は誤って組み立てられているだけです。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-----

また、証明書を付与する権限を表すバンドル(多くの場合2つの証明書)も送信します。これは次のようになります

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

残念ながら、それらはそれほど明確にラベル付けされません。

一般的な方法は、これらすべてを1つのファイルにバンドルすることです-証明書、次に署名証明書。しかし、それらは簡単に区別できないため、誰かが誤ってそれらを他の順序に入れてしまうことがあります-証明書に署名してから、最後の証明書に気付かずに。その場合、証明書はキーと一致しません。

実行すると、証明書が何を表していると考えるかをテストして確認できます

openssl x509 -noout -text -in yourcert.cert

上部に「件名:」が表示され、データのように見えるものが表示されます。代わりにCAのように見える場合は、バンドルの順序が間違っている可能性があります。バックアップを作成し、最後の証明書を先頭に移動して、それが自分の証明書であることを期待する場合があります。

これが機能しない場合は、証明書を再発行する必要があるかもしれません。CSRを作成するときは、(ssl.keyまたはserver.keyだけでなく)対応するサーバーに明確にラベルを付け、mydomain.20150306.keyなどのように名前に日付を付けてコピーを作成します秘密鍵と公開鍵のペアが別のセットと混同されることはほとんどありません。


1
これは私のためにNginxでそれを修正しました!
TTT 2015年

24
証明書チェーンの内容を確認する方法を示すための巨大な+1。
cbednarski 2015

データが含まれているのを確認しながら、nginxが証明書を拒否した理由を理解するために1時間を費やしました
Jacopofar

3
OK、これはComodo証明書とNgixでも私にとってはうまくいきました。最後の証明書ブロックを一番上にプッシュしました。この問題の詳細な説明と洞察については、Thxを参照してください。
アンディD

1
それは私に役立ちます!とても便利な答えです!どうもありがとうございます!
Oleg Klimenko 2017

70
  1. 証明書とキーがPEM形式であることを確認してください。そうでない場合は、opensslコマンドを使用して変換します
  2. 公開鍵のMD5ハッシュをチェックして、秘密鍵の内容と一致することを確認します

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

7
いいアドバイス !まあ、md5ハッシュが同じでも同じエラーが発生します^^
Delphine

4
ハッシュの検証方法を含めていただきありがとうございます。コピーペーストエラーがあり、pemの先頭からダッシュが1つ足りなかったことがわかりました。あなたは私に多くの頭痛を救った。乾杯。
ジャスティンフォーティア2016年

38

バンドルと証明書を間違った順序で追加したため、これが他の誰かを助けることができるので、この問題が発生しました。

以前(間違っています):

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)

3
これは実際には、受け入れられた質問よりもその質問に対するより良い答えです。
ボールドーズ

9

これが発生し、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「私の証明書はどこにありますか?」を参照してください


または、バンドル内の証明書の順序が間違っています:最初に暗号化し、次に独自の証明書。
ingopingo 2017

5

私は同じ問題を抱えていて、最後に証明書ファイル内のPEMブロックの順序を変更することで解決しました。

certブロックはファイルの最初に配置し、次に中間ブロック、次にルートブロックに配置する必要があります。

この問題は、問題のある証明書ファイルを有効な証明書ファイルと比較することで実現しました。


1

問題に関する私の5セント:

同じ問題がありました。約1時間後、証明書を誤って貼り付けたことがわかりました。

このようなエラーが発生した場合は、証明書を確認してください。


1

私の場合、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を再起動しました。


0

これは、CAが中間証明書を発行したときにも発生する可能性があります。

私はnginxでこの問題に2回遭遇しましたが、この投稿の解決策のどれも問題を説明していませんでした。マルコという名前の素敵な紳士によるここのブログの投稿はそれを釘付けにしました。https://medium.com/@mrkdsgn/steps-to-install-a-go-daddy-ssl-certificate-on-nginx-on-ubuntu-14-04-ff942b9fd7ff

私の場合、go-daddyがCAでした。これは、証明書と中間証明書バンドルを発行する方法に固有です。

これがマルコのブログ投稿からの抜粋です

Nginxでは、CAに中間証明書が含まれている場合、証明書とCAの中間証明書を含む単一のチェーン証明書ファイルを作成する必要があります。

このコマンドを使用して、example.com.chained.crtという名前の結合ファイルを作成できます。

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


0

私の場合、問題は、CLIインターフェイスにデータを入力せずに、Sertificatesを作成したことです。私がクリティフィケートを再生成し、すべてのフィールド(市、州など)を熱狂させたとき、すべてがうまくなりました。

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

0

bundle.crtとmain certを組み合わせたときに起こりました。その理由は、メインの証明書をbundle.crtの下にコピーしたためです。それは逆になるはずです

1 /メイン証明書2 / bundle.crt


0

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を再起動します。


0

SL_CTX_use_PrivateKey( "/ etc / nginx / ssl / file")が失敗しました(SSL:エラー:0B080074:x509証明書ルーチン:X509_check_private_key:key値が一致しません)

証明書の秘密鍵(このエラーは、発生する可能性がありssl_certificate_key、例えば.keyまたは.pemファイル)が公開証明書ファイルと一致していない(ssl_certificateあなたのnginxの設定(チェックで)nginx.confまたは中sites-enabled/)。両方のファイルが一致していることを確認してください。

詳細については、Nginxエラーログを確認してください(例:)/var/log/nginx/error.log


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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.