証明書のチェーン検証パスが複数ある場合は短いものが優先される

適用対象: Windows 7 EnterpriseWindows 7 Home BasicWindows 7 Home Premium

現象


証明書の検証を実行した際、クロスCA証明書などがチェーンに存在している場合など、証明書のチェーン検証パスが複数存在する場合があります。
この場合、証明書のチェーン検証では、短いチェーンが優先的に利用されます。
たとえば証明書のチェーンを確認した際、以下のような証明書チェーンが確認できるとします。

1.  証明書(サーバー証明書やクライアント証明書など)  - 中間 CA証明書 – ルート CA証明書
2.  証明書(サーバー証明書やクライアント証明書など)  - 中間 CA証明書 (1)  –  中間CA証明書 (2) - ルート CA証明書

この場合、チェーンの検証結果は、短いチェーンが利用されるため、1 のチェーンが利用されることとなります。

- 補足
この動作により、たとえば下記のシナリオで問題が起きる場合があります。
WEB サーバで利用しているサーバ証明書は、クライアントからのHTTPS (SSL) 接続を受けた際、自身のサーバ証明書と、検証で得られている証明書チェーン中間CA証明書を送ります。
複数の証明書チェーンが確認できる場合、短いチェーンが優先的に利用されます。
サーバ証明書と中間CA証明書を受け取ったクライアント側において、長いチェーンにてのみ検証できる状態である場合、証明書チェーンの検証が正しく出来ない可能性があります。結果、サーバ証明書が検証できない旨のエラーメッセージがブラウザに表示されることがあります。

詳細


証明書チェーンが複数存在しており、特定のチェーンを利用させたい場合は、利用しない検証チェーンに存在するCA証明書を、証明書ストアから削除するか、無効にする必要があります。

IIS などが参照する証明書ストアは一つであり、各サイト毎に参照する証明書ストアを分けることができません。
そのため、 1 台のサーバにて複数のWEBサイトを構築し、両方のWEBサイト共に複数の証明書チェーンが確認できる共通の証明書を利用している場合、それぞれのサイト毎に別のチェーンを利用するように、使い分けることができません。

たとえば、WEBサイトA, WEBサイトB を同一のIIS 上に構築し、両方のWEBサイトにおいて以下のような証明書チェーンが複数確認できるとします。

1.  証明書(サーバー証明書やクライアント証明書など)  - 中間 CA証明書 – ルート CA証明書 
2.  証明書(サーバー証明書やクライアント証明書など)  - 中間 CA証明書 (1)  –  中間CA証明書 (2) - ルート CA証明書 

この場合、WEBサイトAはパス 1 を利用し、WEBサイトB はパス2 を利用する、といったように別のチェーンを使い分けることはできません。 
 

解決方法


本動作は仕様です。

 

回避策


この問題に対処するためには、以下のいずれかの方法にて対処することができます。

方法1. 利用しない CA証明書を削除する
証明書チェーンが複数存在しており、特定のチェーンを利用したい場合は、利用しない検証チェーンに存在するCA証明書を、証明書ストアから削除します。

手順
1. スタート ボタンから、mmc.exe とタイプし実行します。
2. [ファイル] から [スナップインの追加と削除] を実行します。
3. [証明書] を追加します。
 証明書がインストールされているアカウント (コンピュータ、ユーザ)を選択し追加してください。
4. 証明書スナップインが開きます。
 目的の証明書を削除します。
 信頼されたルート証明機関としてにインストールされている場合は [信頼されたルート証明機関] フォルダより目的の証明書を削除します。
 中間証明機関としてにインストールされている場合は [中間証明機関] フォルダより目的の証明書を削除します。

** ご利用のアプリケーションによっては、再起動が必要となります。


方法2. 利用しないCA証明書の目的を無効にする

1. スタート ボタンから、mmc.exe とタイプし実行します。
2. [ファイル] から [スナップインの追加と削除] を実行します。
3. [証明書] を追加します。
 証明書がインストールされているアカウント (コンピュータ、ユーザ)を選択し追加してください。
4. 証明書スナップインが開きます。
 目的の証明書がインストールされているストアのフォルダを開きます。
 信頼されたルート証明機関としてにインストールされている場合は [信頼されたルート証明機関] です。
 中間証明機関としてにインストールされている場合は [中間証明機関] です。
5. 目的の証明書を右クリックし、プロパティを開きます。
6. [この証明書の目的を無効にする] にチェックをいれ、OK をクリックします。

** ご利用のアプリケーションによっては、再起動が必要となります。