警告
廃止され、サポート対象外となった Internet Explorer 11 デスクトップ アプリケーションは、特定のバージョンの Windows 10 で Microsoft Edge の更新プログラムを通じて完全に無効になります。 詳細については、「Internet Explorer 11 デスクトップ アプリの廃止に関する FAQ」をご覧ください。
この記事の目的は、Crypto API が HTTP ベースの CRL 配布ポイント URL を正常にダウンロードできるルートを見つける方法を説明することです。これは、CRL のネットワーク取得に関連するシナリオのトラブルシューティングに役立ちます。
元の製品バージョン: Windows Server 2003 Service Pack 2、Windows Vista Enterprise、Windows Server 2008 Enterprise、Windows 7 Enterprise、Windows Server 2008 R2 Enterprise、Windows 10、Windows Server 2016、Windows Server 2019
元の KB 番号: 2623724
まとめ
次のシナリオについて考えてみます。 アプリケーションでは、WinINet API、WinHTTP API、または .NET Framework の System.Net.HttpWebRequest クラスを使用して、SSL/TLS 経由で HTTP 要求を送信します。 SSL/TLS セキュア チャネル ネゴシエーション中、サーバーはサーバー証明書を使用してサーバー Hello メッセージをクライアントに送信し、その ID をクライアントに証明します。 この場合、サーバー証明書情報に証明書失効リスト (CRL) 配布ポイントの一覧を含めることもできます。 これらの CRL 配布ポイントの一覧には、クライアントが CRL をダウンロードできる URL が含まれており、サーバー証明書が証明書の発行元によって失効しているかどうかを確認できます。
Crypto API は内部的に WinHTTP API を使用して、CRL 配布ポイントの HTTP ベースの URL をダウンロードします。 URL をダウンロードする前に、WinHTTP は CRL URL に到達するためのルートを認識している必要があります。 環境にプロキシ サーバーがある場合、WinHTTP はプロキシ サーバーを自動的に検出するか、WinHTTP API を使用するアプリケーションから、特定のプロキシを使用して CRL をダウンロードするように求めることができます。
Crypto API は、次のロジックを使用して最初にプロキシ サーバーを検索しようとします。プロキシ サーバー アドレスが見つかると、その特定のプロキシ インスタンスを使用するように WinHTTP に要求されます。
プロキシ インスタンスに到達できない場合、または正しくない場合、WinHTTP は CRL をダウンロードできず、証明書失効チェックは失敗し、アプリケーションは失効エラーを示す Crypto API からエラーを受け取ります。 ユーザーに同じエラーを報告できます。実装によっては、セキュリティで保護されたチャネルの確立が失敗する可能性があります。
プロキシを検出しようとすると、Crypto API は次のロジックを使用します。
CRL チェックが行われているコンピューターで静的プロキシ設定が構成されているかどうかを確認します。 通常、この構成は netsh ユーティリティを使用して、Windows Vista、Windows 2008、Windows 7、または Windows 2008 R2 でプロキシを手動で設定します。 静的プロキシが見つかった場合、Crypto API は静的に検出されたプロキシを使用して、WinHttp 経由で CRL をダウンロードします。 netsh の詳細については、「詳細情報」セクションの「Windows ハイパーテキスト転送プロトコル (WINHTTP) のNetsh コマンド」を参照してください。
注意
このチェックは、Windows Vista、Windows 2008、Windows 7、Windows 2008 R2 でのみ実行されます。 Windows 2003 では、Crypto API は静的プロキシ設定をチェックしません。
静的に構成されたプロキシが見つからない場合、Crypto API は、Crypto API が実行されているユーザー コンテキストの Internet Explorer プロキシ設定の取得を試みます。
プロセスの実行内容に応じて、現在ログオンしているユーザーの ID、または特定のユーザーが実行するか、または指定された任意のシステム アカウント (LOCAL SYSTEM、NETWORK SERVICE、LOCAL SERVICE) を使用できます。 次のレジストリの場所は、実行中の ID に基づいて照会されます。
- 現在ログオンしているユーザー:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
- ネットワーク サービス:
HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\Internet Settings
- ローカル システム:
HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\Internet Settings
- ローカル サービス:
HKEY_USERS\S-1-5-19\Software\Microsoft\Windows\CurrentVersion\Internet Settings
- その他のユーザー:
HKEY_USERS\<<SID of that user>>\Software\Microsoft\Windows\CurrentVersion\Internet Settings
レジストリ情報に応じて、そのユーザーのプロキシ設定が返されます。 プロキシ設定がない場合、情報は返されません。 プロキシ設定が返された場合は、次のオプションの組み合わせを含めることができます。
- 設定を自動的に検出します。
- 自動構成スクリプトを使用します。
- プロクシ。
注意
プロセスが現在ログオンしているユーザーとは異なる ID として実行されている場合は、そのユーザーのプロキシ設定の構成方法に応じて、プロキシ設定に不整合が生じる可能性があります。 このような場合は、現在のユーザーとして Internet Explorer を使用して CRL の場所を参照すると CRL が正常にダウンロードされますが、別のユーザーとして実行されている Crypto API から使用すると、同じプロセスが失敗する場合があります。 このような状況では、すべてのユーザーのインターネット設定を確認し、一貫性があることを確認することを強くお勧めします。
インターネット設定は、NETWORK SERVICE、LOCAL SYSTEM、LOCAL SERVICE などの非対話型ユーザーには存在しないのが理想的です。これらの ID を使用して Internet Explorer を開く必要はないためです。 このような場合は、これらの非対話型ユーザーが Internet Explorer 用に構成されたプロキシ設定を持たないようにするか、Internet Explorer を使用して CRL のダウンロードが成功するユーザーのプロキシ設定と一致していることを確認する必要があります。
- 現在ログオンしているユーザー:
実行中のユーザーに Internet Explorer プロキシ設定が存在しない場合、またはプロセス ID の Internet Explorer 設定が示している場合。 設定を自動的に検出 または 自動構成スクリプトを使用すると Crypto API は問題の CRL のプロキシを自動的に検出しようとします。 これにより、特定のプロキシ情報が返されるか、プロキシの自動検出が失敗した場合、または URL にプロキシが必要ない場合は "プロキシなし" が返されます。
Crypto API は、WinHTTP API を使用して、検出されたプロキシを使用して CRL URL をダウンロードしようとします (プロキシを検出できなかった場合や、URL にプロキシが必要ない場合はプロキシがありません)。
プロキシに到達できない場合、またはプロキシ情報が間違っている場合、CRL URL のフェッチは失敗します。 その後、Crypto API は呼び出し元 API にこのエラーを報告し、実装に応じて、Crypto API の呼び出し元は要求を中止するか、それを通すかを決定できます。
注意
アプリケーション自体が WinHTTP API を使用していて、WinHttpOpen 呼び出しまたは WinHttpSetOption 呼び出しでプロキシ情報を設定している場合、Crypto API はアプリケーションが設定したプロキシ情報にアクセスせず、上記のようにプロキシ情報の検出を試みます。 Crypto API と独自のアプリケーションからの WinHttp API の使用は独立しており、相互に情報を共有することはありません。
Windows 10 では、CryptoAPI 2 (CAPI2) は独自のプロキシ設定を持たないように更新されます。 この変更は、Windows 10 以降では CAPI2 が WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY フラグを使用するWinHttpOpen 関数呼び出しで実装されます。
フラグ名 | 説明 |
---|---|
WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY(自動プロキシアクセスタイプ) | システムおよびユーザーごとのプロキシ設定 (Internet Explorer プロキシ構成を含む) を使用して、使用するプロキシ/プロキシを決定します。 複数のプロキシ間のフェールオーバー、インターフェイスごとに異なるプロキシ構成、および認証を自動的に処理しようとします。 Windows 8.1 以降でサポートされています。 |
注意
以前のバージョンの Windows では、 WINHTTP_ACCESS_TYPE_DEFAULT_PROXY フラグが使用されています。
WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY フラグは、WinHttp がプロキシ検出ロジックを処理し、呼び出し元がプロキシ構成を処理するコードを記述しないことを意味します。 WINHTTP_ACCESS_TYPE_AUTOMATIC_PROXY フラグが設定されている場合、WinHttp は netsh ユーティリティと Internet Explorer プロキシ設定を使用して既定のプロキシ構成を確認します。
注意
Internet Explorer のプロキシ設定はユーザー単位です。つまり、呼び出し元はログオンしているユーザーを偽装する必要があります。
ログオンしているユーザーごとにプロキシを設定しない場合は、 ProxySettingsPerUser キーを 0 に設定して、コンピューター全体のプロキシを設定できます。
レジストリ キー | HKLM\Software\Policies\Microsoft\Windows\CurrentVersion\InternetSettings\ProxySettingsPerUser |
---|---|
種類 | REG DWORD |
値 | 0: マシンごとのプロキシ 1 または値なし: ユーザー単位で |
レジストリ キーを設定したら、インターネット プロパティ (Inetcpl.cpl) を使用してプロキシを構成できます。 コンピューター全体のプロキシ設定は、管理者またはグループ ポリシーを使用して変更できます。
詳細
詳細については、以下を参照してください: