(ブラウザ以外の) クライアントが有効な署名付き証明書を信頼しないことがあるのはなぜですか?

(ブラウザ以外の) クライアントが有効な署名付き証明書を信頼しないことがあるのはなぜですか?

これはやや標準的な質問ですが、よろしいでしょうか。

私は、Linux サーバー上で実行されているクライアント (通常は Java アプリケーション) が有効な署名付き証明書 (ブラウザーによって信頼されている証明書) を信頼しない状況をトラブルシューティングすることがよくあります。通常の簡単な解決策は、証明書を Java cacerts 信頼ストアに追加することですが、なぜこれが必要なのか疑問に思っています。

私の理解では、2つの可能性があります。

  1. サーバー側が完全なチェーン (エンド エンティティ証明書 + 中間証明書) を正しい順序で送信しておらず、クライアントが中間証明書を信頼していません (おそらく古すぎるため)。
  2. クライアント信頼ストアには、信頼アンカーとして使用するルート証明書が含まれていません (古すぎるためと思われます)。

それは正しいでしょうか? もしそうなら、エンドエンティティ証明書の信頼を強制する別の可能性として次のことが考えられます:

  • 完全なチェーンを送信するようにサーバー アプリケーションを構成します。
  • クライアント (例: Java) を新しいバージョンにアップグレードします。私の場合、通常、使用できる Java のメジャー リリースはソフトウェアの前提条件によって制限されますが、各マイナー リリースには更新された信頼ストアが含まれている可能性があります。

ご説明のご意見があれば、ぜひお聞かせください。

関連情報