web-dev-qa-db-ja.com

「openssl verify」が「ローカル発行者証明書を取得できません」を出力する

/ etc/sslでSudo openssl verify mywebsite.pemを実行すると、次のようなメッセージが表示されます

    mywebsite.pem: OU = GT46830179, OU = See www.rapidssl.com/resources/cps (c)15, OU = Domain Control Validated - RapidSSL(R), CN = *.logitapp.com
error 20 at 0 depth lookup:unable to get local issuer certificate

Sslpointの証明書ジェネレーターからnanoにコピーしてmywebsite.keyを作成しました。 Sudo cat mywebsite.crt sslpointintermediate.crt >> mywebsite.pemを実行してmywebsite.pemを作成しました。電子メールからnanoに貼り付けて、mywebsite.crtおよびsslpointintermediate.crtを作成しました sslpoint で送信されました。

mywebsite.pemとmywebsite.keyは、実際にはファイルの名前ではありません。

Debian 8の使用。nginxとgunicornをsslで動作させようとしています。上記の出力に示されているように、ssl証明書が正しくインストールされていないため、問題があります(少なくとも部分的に)。どうすればこれを解決できますか?

編集:

この質問の以前のバージョンでは、.openファイルの「openssl verify」についても尋ねていました。それを試す意味がないので、質問のその部分を削除しました。

1
Daniel

openssl verifyを使用する場合は、代わりに次を使用する必要があります。

openssl verify -CAfile your-intermediates-and-final.pem mywebsite.crt

your-intermediates-and-final.pemと、すべての中間および最終(信頼できるアンカー)がPEM形式で内部で連結されています。 -CApath /etc/ssl/certsオプションを使用する場合は、各中間証明書が/ etc/ssl/certsディレクトリにあり、ルートとして実行する必要があります。

$ c_rehash

キーには秘密キーのみが含まれ、証明書は含まれないため、「openssl verify」でそれを確認しても意味がありません。


nginxは正しく設定されているようです。権限が正しいこと、およびserver {}またはhttp {}セクションに次の2つの構成パラメーターがあることを確認します。

ssl_certificate /path/to/your/mywebsite.pem;
ssl_certificate_key /path/to/your/mywebsite.key;

server {}セクション:

listen 443 ssl;
5
Seb35

OpenSSLは、/etc/ssl/private/のプライベートキーとしてプライベートデータを読み取る必要がある場合にのみ、ルートとして実行する必要があります。証明書の検証には、ルートは必要ありません。 /etc/ssl/certsの証明書は、すべてのユーザーとソフトウェアが証明書を検証できるように、誰でも読み取ることができる必要があります。または、ウェブサイトを呼び出すたびにrootパスワードを入力しますか?

$ openssl verify mywebsite.pem
mywebsite.pem: OU = GT46830179, OU = See www.rapidssl.com/resources/cps (c)15, OU = Domain Control Validated - RapidSSL(R), CN = *.logitapp.com
error 20 at 0 depth lookup:unable to get local issuer certificate

Verify(1ssl)のマンページを見る:

   2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate
       the issuer certificate of a looked up certificate could not be found. This normally means the list of trusted certificates is not complete.

Opensslに、チェーン内のどこで証明書が必要かに関する情報を提供する必要があります。

openssl verify [-CApath directory] [-CAfile file] [-untrusted file] [certifictes]

例えば:

openssl verify -CAfile RootCert.pem -untrusted Intermediate.pem UserCert.pem

参照 SOに関するこの質問


$ openssl verify mywebsite.key I get a message saying
unable to load certificate
139893743232656:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE

秘密鍵を指定したため、証明書を読み込めませんでした。これは、証明書チェーンと有効性などの追加情報を含む公開鍵を保持する証明書の反対です。エラーメッセージには、何が予期されているかが明確に示されています。Expecting: TRUSTED CERTIFICATE


ルート証明書がOSによってまだ信頼されておらず、信頼されるようにしたい場合にのみ、ルート証明書を「インストール」する必要があります。しかし、サーバーについて説明するとき、トラストストアに独自のドメインの証明書を含める意味はありません。この場合、ソフトウェア(nginx)は、ドメインのリーフ証明書からCAのルート証明書(オプション)まで、完全な信頼チェーンを含む証明書ファイルにアクセスできる必要があります。

Nginxのドキュメントを参照するか、この種の他の質問(SEとSFを含むインターネット)でいっぱいか、問題の正確で詳細な説明を提供してください。

2
sebix

Awscliはシステムのローカルのopensslを使用して証明書を確認しているようです。私のMacにはopensslバージョン0.9.8があり、証明書を確認できませんでした。あなたはopensslのバージョンを次のコマンドで確認できます

openssl version

Opensslバージョン0.10を含むシステムに切り替えたところ、問題が解決しました。また、opensslバージョンをアップグレードすることもできます。

証明書をもう一度アップロードしてみましたが、うまくいきました。

0
Muneeb Ahmad

cat最終的なCA_Chain.crtに対するすべての証明書が必要です。

猫RootCA.crt IntermediateCert1 IntermediateCert2> CA_Chain.crt

openssl verify -CAfile CA_Chain.crt website.crt

(IntermediateCert2によるwebsite.crt署名)

0
Kooshkaki