SSL/TLS 証明書を使用する場合、「ローカル発行者の証明書を取得できません」エラーが発生すると、特にクライアントとサーバー間の安全な通信が中断される場合にイライラすることがあります。 HTTPS リクエストを実行しようとしている場合でも、Web サーバーを設定しようとしている場合でも、安全な Web サイトにアクセスしようとしている場合でも、このエラーによってプロセスが中断される可能性があります。このガイドでは、この問題を解決するための原因、一般的なシナリオ、段階的な解決策について説明します。
「ローカル発行者の証明書を取得できません」エラーは何を意味しますか?
「ローカル発行者の証明書を取得できません」エラーは通常、ルート証明書または中間証明書が見つからないか、信頼されていないため、システムが SSL 証明書チェーンを検証できない場合に発生します。 SSL 証明書は、信頼された認証局 (CA) によって発行されたルート証明書で始まる証明書の階層構造である信頼のチェーンに依存します。このチェーン内のリンクが欠落しているか、不適切に構成されている場合、システムは安全な接続を確立できず、このエラーが発生します。
エラーが発生する一般的なシナリオ
このエラーはさまざまな環境や状況で発生する可能性があります。最も一般的なシナリオをいくつか見てみましょう:
開発環境 (例: cURL、Node.js、Python)
開発環境では、開発者は多くの場合、cURL、Node.js、Python などのツールを使用して HTTPS リクエストを作成します。システムに必要なルート証明書が不足している場合、これらの要求は失敗し、「ローカル発行者の証明書を取得できません」エラーが表示されることがあります。これは通常、開発環境が分離されているか、システムの CA 証明書にアクセスできない場合に発生します。
ウェブブラウザ
Web ブラウザは、SSL 証明書チェーンが不適切に構成されている Web サイトにアクセスしようとすると、このエラーを表示することがあります。これは、サイトに中間証明書がないか、期限切れのルート証明書を使用していることが原因である可能性があります。ブラウザはセキュリティ対策としてアクセスをブロックし、信頼できない接続についてユーザーに警告します。
サーバー構成 (Apache、Nginx など)
運用環境では、Apache や Nginx などの Web サーバーが正しい証明書チェーンで構成されていない場合、このエラーが発生する可能性があります。 Web サーバーに SSL 証明書を展開する際の一般的な原因は、中間証明書の構成ミスまたは欠落です。
エラーの根本原因
このエラーを解決するには、このエラーの根本原因を理解することが重要です。このエラーが表示される一般的な理由は次のとおりです。
- ルート証明書または中間証明書の欠落: サーバーは完全な証明書チェーンを提供できないため、クライアントは接続を信頼できなくなります。
- 証明書チェーンの構成が間違っています: 証明書チェーンの順序が間違っているか、不完全です。
- 期限切れまたは信頼できない証明書: ルート証明書の期限が切れているか失効しているため、証明書チェーンが壊れている可能性があります。
- 期限切れの CA 証明書: ローカル システムの CA 証明書が期限切れであるか、信頼されたルート証明書が欠落している可能性があります。
SSL 証明書チェーンの仕組み
このエラーがどのように発生するかをより深く理解するには、SSL 証明書チェーンがどのように機能するかを知ることが重要です。証明書チェーンは、信頼された認証局によって発行されたルート証明書から始まります。このルート証明書は中間証明書を検証するために使用され、中間証明書はサーバーの証明書を検証します。
このチェーン内の証明書が欠落しているか信頼できない場合、クライアントはサーバーの証明書を検証できず、「ローカル発行者の証明書を取得できません」エラーが発生します。この問題を防ぐには、チェーン全体が適切に構成されていることを確認することが重要です。
エラーを解決するためのトラブルシューティング手順
このエラーの原因がわかったので、解決方法を見てみましょう。以下にいくつかの手順を示します:
- 証明書チェーンを検証する
最初に行うべきことの 1 つは、SSL 証明書チェーンを確認することです。 OpenSSL などのツールを使用してチェーンを検査し、証明書が欠落していたり構成が間違っていないかどうかを確認できます。たとえば、次のコマンドを使用すると、証明書チェーンを確認するのに役立ちます。
バッシュ
コードをコピーする
openssl s_client -connect yourdomain.com:443 -showcerts
このコマンドは、サーバーの証明書とサーバーが提供する中間証明書を表示します。チェーンが不完全な場合は、どの証明書が欠落しているかがわかります。
- 信頼されたルート証明書を更新する
クライアントに信頼できるルート証明書がないことが原因でエラーが発生する場合は、システムの信頼できるルート証明書を更新すると問題が解決する可能性があります。たとえば、Linux では、次のコマンドを使用して CA 証明書を更新できます。
バッシュ
コードをコピーする
sudo update-ca-certificates
このコマンドにより、システムに信頼できるルート証明書の最新のセットが確実に存在し、問題の解決に役立ちます。
- 証明書バンドルを正しく構成する
Apache や Nginx などのサーバーで SSL を構成する場合、サーバー証明書を中間証明書およびルート証明書と連結して証明書バンドルにすることが重要です。バンドルが不完全であるか順序が間違っている場合、クライアントは証明書チェーンを検証できず、エラーが発生します。 Web サーバーを設定するときは、証明書チェーンを正しく構成してください。
プラットフォーム固有の修正
「ローカル発行者の証明書を取得できません」エラーを修正するには、プラットフォームやツールが異なると特定の解決策が必要になります。以下は一般的な開発環境の修正です:
- cURL
cURL では、--cacert フラグを使用して正しい CA バンドルを指定することで、このエラーを解決できることがよくあります。最新の CA 証明書をダウンロードして、次のように使用できます。
バッシュ
コードをコピーする
カール --cacert /path/to/cacert.pem https://yourdomain.com
あるいは、cURL がデフォルトで使用するシステム上の CA 証明書を更新することもできます。
- Node.js
Node.js の場合は、NODE_EXTRA_CA_CERTS 環境変数を更新して CA 証明書へのパスを含める必要がある場合があります。これは次のコマンドで実行できます。
バッシュ
コードをコピーする
エクスポート NODE_EXTRA_CA_CERTS="/path/to/cacert.pem"
これにより、Node.js は HTTPS リクエストを行うときに指定された CA バンドルを使用できるようになります。
- Python リクエスト
Python では、必要な CA 証明書が見つからない場合、一般的なリクエスト ライブラリがこのエラーを引き起こす可能性があります。信頼されたルート証明書の最新リストを含む certifi パッケージをインストールすると、通常は問題が解決します。
バッシュ
コードをコピーする
pip インストール証明書
verify パラメーターを使用して、コード内で CA バンドルを直接指定することもできます。
パイソン
コードをコピーする
インポートリクエスト
request.get('https://yourdomain.com', verify='/path/to/cacert.pem')
「ローカル発行者の証明書を取得できません」エラーの防止
今後このエラーが発生しないようにするには、信頼されたルート証明書を使用してシステムを定期的に更新する必要があります。導入時に SSL 証明書の検証を自動化し、ツールを使用して証明書チェーンを検査すると、潜在的な問題が実稼働環境に影響を与える前に特定するのに役立ちます。さらに、必要なすべての中間証明書を使用して証明書チェーンが適切に構成されていることを常に確認してください。
結論
「ローカル発行者の証明書を取得できません」エラーにより安全な接続が中断される可能性がありますが、SSL 証明書チェーンの根本的な問題を理解し、対象を絞った修正を適用することで、この問題を効果的に解決できます。 cURL や Node.js などの開発ツールを使用している場合でも、運用サーバーを構成している場合でも、このガイドで概説されているトラブルシューティング手順に従うと、根本原因を特定して修正するのに役立ちます。システムの CA 証明書を最新の状態に保ち、展開中に SSL 構成を検証することで、今後このエラーが発生するのを防ぐことができます。
以上がローカル発行者の証明書を取得できません エラーの解決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。