web-dev-qa-db-ja.com

サーバー証明書を検証するには、トラストストアに中間CA証明書があれば十分ですか?

以下がチェーンであると仮定しましょう:

サーバー証明書->中間1->中間2->ルート証明書

以下は、クライアントに送信されるチェーンサーバーです。

サーバー証明書->中間1->中間2

トラストストアにIntermediate1証明書のみ(他の証明書なし)があります。

このシナリオでは、クライアントはサーバー証明書を検証できますか?

すぐに発行者がトラストストアに存在するため、クライアントが正常に検証してSSL接続を開始すると確信しています。私が間違っている?

1
rgk

トラストストアに中間1の証明書がある場合、これは、問題のサーバー証明書を含む、このCAによって発行された証明書を信頼することを意味します。したがって、サーバーが中間1によって発行されたリーフ証明書のみを送信する場合、クライアントはそれを信頼します。

理論的には、サーバーが中間1と中間2を追加で送信する場合、クライアントもサーバーを信頼します。つまり、ルートCAへの信頼パスで必要なCAです。クライアントはルートCAを知らない(信頼する)ため、中間1を信頼するため、サーバーから送信された不要なチェーン証明書のみを無視する必要があります。ほとんどのクライアントはそのように動作しますが、この場合検証が失敗する1.0.2より前のOpenSSLバージョンにはバグがありました。詳細は OpenSSL issue#3621 または stackoverflowでのこの説明 を参照してください。

2
Steffen Ullrich

RFC 528 セクション6を見てください。

トラストアンカーの選択はポリシーの問題です。これは、階層PKIの最上位のCA、検証者自身の証明書を発行したCA、またはネットワークPKIのその他のCAである可能性があります。パスの検証手順は、トラストアンカーの選択に関係なく同じです。さらに、さまざまなアプリケーションがさまざまなトラストアンカーに依存する場合や、トラストアンカーのセットのいずれかで始まるパスを受け入れる場合があります。

つまり、クライアント側での証明書パス検証の実装に依存します。一部のクライアントでは、信頼できる中間CA証明書のみを使用することで機能し、完全なチェーンが必要です。一部のクライアントは、検証プロセスを高速化するために、検証後に中間証明書もキャッシュします。

2
Kami