web-dev-qa-db-ja.com

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

SSLをセットアップできません。私はグーグルで検索しましたが、いくつかの解決策を見つけましたが、どれもうまくいきませんでした。助けが必要です...

以下は、nginxを再起動しようとしたときに表示されるエラーです。

[email protected]:~# 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をチェックし、ディレクティブは正しいプライベートキーと証明書を指している。

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

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

77
Galou

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

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

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

30
dev0z

それらが一致しないことを確立したら、まだ問題があります-それについてどうするか。多くの場合、証明書は単に誤ってアセンブルされる場合があります。 CAが証明書に署名すると、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

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

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

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

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

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

59
dev0z

この問題は、バンドルと証明書を間違った順序で追加していたため、他の人に役立つ可能性があるためです。

前(これは間違っています):

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)
21
Mandeep Gill

これが発生し、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「証明書はどこにありますか?」

8
Marian

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

証明書ブロックをファイルの先頭に配置し、次に中間ブロック、次にルートブロックを配置する必要があります。

問題のある証明書ファイルと実際の証明書ファイルを比較することで、この問題に気付きました。

3
fuweichin

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

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

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

1
Nick

私の場合、サーバーを変更したため、このコマンドで新しいcsrを作成する必要があったため、ssl証明書を変更したかったのです。

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

会社のsslプロバイダーにmysite.csrファイルを送信し、証明書crtを受け取った後、nginxを再起動し、このエラーが発生しました

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

多くの調査の後、エラーはキーファイルのモジュールがCRTファイルのモジュールと同じではないということでした

だから、それを機能させるために新しいcsrファイルを作成しましたが、このコマンドでファイルの名前を変更しました

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

その後、会社のプロバイダーから新しいcrtファイルを受信し、nginxを再起動すると動作しました。

1
lemon fish

Bundle.crtとmain certを組み合わせたとき、私に起こりました。その理由は、メイン証明書をbundle.crtの下にコピーしたためです。それは他の方法でなければなりません

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

0
Krishna

私の場合、問題はCLIインターフェイスにデータを入力せずに証明書を作成したことです。私がクレティフィケートを再生成し、すべてのフィールドをen動させたとき:都市、州、等はすべてうまくいった。

 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

これは、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

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ファイルは、paste.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

0
electrocoder