この記事では、Schannel セキュリティ サポート プロバイダー (SSP) を介して、トランスポート層セキュリティ (TLS) プロトコルと Secure Sockets Layer (SSL) プロトコルの Windows 実装でサポートされているレジストリ設定情報について説明します。 この記事で説明するレジストリ サブキーとエントリは、Schannel SSP 、特に TLS および SSL プロトコルの管理とトラブルシューティングに役立ちます。
注意事項
この情報は、必要な設定が適用されていることをトラブルシューティングまたは確認するときに使用する参照として提供されます。 他の方法がない場合を除き、レジストリを直接編集しないことをお勧めします。 レジストリへの変更は、レジストリ エディターまたは Windows オペレーティング システムによって適用される前に検証されません。 このため、不適切な値が設定される場合があり、これにより回復不能なシステム エラーが発生することがあります。 可能な場合は、レジストリを直接編集するのではなく、グループ ポリシー、Microsoft 管理コンソール (MMC) などの他の Windows ツールを使用します。 レジストリを編集する必要がある場合は、細心の注意が必要です。
SChannel のログ
システム イベント ログに保存され、イベント ビューアーを使用して表示できる Schannel イベントのログ記録レベルは 8 つあります。 このレジストリ パスは、DWORD 値が HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
に設定された EventLogging キーの下のに格納されます。
10 進数または 16 進数 | SChannel ログ イベント |
---|---|
0 | イベントなし |
1 | エラー イベント |
2 | 警告イベント |
3 | エラーと警告イベント |
4 | 情報と成功イベント |
5 | エラー、情報、成功イベント |
6 | 警告、情報、成功イベント |
7 | エラー、警告、情報、成功イベント |
注
ログ レベルを変更した後、デバイスを再起動する必要があります。
CertificateMappingメソッド
サーバー アプリケーションでクライアント認証が必要な場合、Schannel は、クライアント コンピューターによって提供される証明書をユーザー アカウントに自動的にマップしようとします。 クライアント証明書を使用してサインインするユーザーを認証するには、マッピングを作成します。これにより、証明書の情報が Windows ユーザー アカウントに関連付けられます。
証明書のマッピングを作成して有効にすると、そのユーザーは、クライアントがクライアント証明書を提示するたびに、サーバー アプリケーションによって適切な Windows ユーザー アカウントに自動的に関連付けられます。
ほとんどの場合、証明書は次の 2 つの方法のいずれかでユーザー アカウントにマップされます。
- 1 つの証明書が 1 つのユーザー アカウントにマップされる (1 対 1 のマッピング)
- 複数の証明書が 1 つのユーザー アカウントにマップされる (多対 1 のマッピング)
Schannel プロバイダーは、次の 4 つの証明書マッピング方法を使用します。
- Kerberos service-for-user (S4U) マッピング (既定で有効)
- ユーザー プリンシパル名マッピング
- 1 対 1 のマッピング (サブジェクト/発行者マッピングとも呼ばれます)
- 多対 1 のマッピング
レジストリ パス: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
エントリ名 | DWORD(ダブルワード、32ビット無符号整数) | 既定で有効 |
---|---|---|
サブジェクト/発行者 | 0x000000001 | いいえ |
発行者 | 0x000000002 | いいえ |
UPNの | 0x000000004 | いいえ |
S4U2セルフ | 0x000000008 | はい |
S4U2自己明示的 | 0x000000010 | はい |
暗号
TLS/SSL 暗号は、暗号スイートの順序を構成して制御する必要があります。 詳細については、 TLS 暗号スイートの順序の構成を参照してください。
Schannel SSP で使用される既定の暗号スイートの順序については、「 TLS/SSL (Schannel SSP) の暗号スイート」を参照してください。
サイファースイート
TLS/SSL 暗号スイートの構成は、グループ ポリシー、MDM、または PowerShell を使用して行う必要があります。詳細については、「 TLS 暗号スイートの順序の構成 」を参照してください。
Schannel SSP で使用される既定の暗号スイートの順序については、「 TLS/SSL (Schannel SSP) の暗号スイート」を参照してください。
クライアントキャッシュ時間
このエントリは、クライアントの TLS セッション キャッシュ項目の有効期間をミリ秒単位で指定します。 Windows Server 2008 と Windows Vista 以降では、既定値は 10 時間です。 値 が 0 の場合、クライアントでの TLS セッション キャッシュが無効になります。
クライアントが Schannel SSP を介してサーバーに初めて接続すると、完全な TLS/SSL ハンドシェイクが実行されます。 完了すると、マスター シークレット、暗号スイート、および証明書は、クライアントおよびサーバーそれぞれのセッション キャッシュに格納されます。
レジストリ パス: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
EnableOcspStaplingForSni
オンライン証明書状態プロトコル (OCSP) のホチキス止めでは、TLS ハンドシェイク中に、インターネット インフォメーションサービス (IIS) などの Web サーバーからクライアントにサーバー証明書を送信するときに、サーバー証明書の現在の失効状態を提供できます。 この機能により、Web サーバーはサーバー証明書の現在の OCSP の状態をキャッシュし、それを複数の Web クライアントに送信できるため、OCSP サーバーの負荷が軽減されます。 この機能がないと、各 Web クライアントは OCSP サーバーからサーバー証明書の現在の OCSP の状態を取得しようとします。 これにより、その OCSP サーバーに高い負荷が発生します。
http.sys 上の Web サービスでは、IIS に加えて、Active Directory フェデレーション サービス (AD FS) や Web アプリケーション プロキシ (WAP) など、この設定のメリットを受けることもできます。
既定では、OCSP のサポートは、セキュリティで保護された (SSL/TLS) シンプル バインディング使用する IIS Web サイトで有効になっています。 ただし、IIS Web サイトで次の種類の SSL/TLS バインディングのいずれかまたは両方を使用している場合、このサポートは既定では有効になりません。
- Server Name Indication が必要
- 集中証明書ストアを使用する
この場合、TLS ハンドシェイク中のサーバー hello 応答には、既定で OCSP のホチキス止め状態は含まれません。 この動作によってパフォーマンスが向上します。Windows OCSP ホチキス止めの実装は、数百のサーバー証明書に拡張します。 ただし、サーバー名表示 (SNI) と中央証明書ストア (CCS) を使用すると、IIS は何千ものサーバー証明書を持つ可能性のある数千の Web サイトにスケーリングできるため、CCS バインドに対して OCSP ステープリングを有効にすると、パフォーマンスの問題が発生する可能性があります。
レジストリ パス: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
次のキーを追加します。
"EnableOcspStaplingForSni"=dword:00000001
無効にするには、DWORD 値を 0 に設定します。
"EnableOcspStaplingForSni"=dword:00000000
注
このレジストリ キーを有効にすると、パフォーマンスに影響する場合があります。
ハッシュ
TLS/SSL ハッシュ アルゴリズムは、暗号スイートの順序を構成して制御する必要があります。 詳細については、 TLS 暗号スイートの順序の構成 を参照してください。
発行者キャッシュサイズ
このエントリは、発行者のキャッシュのサイズを制御し、発行者のマッピングで使用されます。 Schannel SSP は、クライアント証明書の直接発行者だけでなく、クライアントの証明書チェーン内のすべての発行者をマップしようとします。 発行者がアカウントにマップされていない場合 (一般的なケース)、サーバーは同じ発行者名を繰り返しマップしようとすることがあり、その回数は 1 秒あたり数百回に及びます。
これを防ぐために、サーバーには負のキャッシュがあるため、発行者名がアカウントにマップされない場合はキャッシュに追加され、Schannel SSP はキャッシュ エントリの有効期限が切れるまで発行者名のマップを再試行しません。 このレジストリ エントリは、キャッシュ サイズを指定します。 既定では、このエントリはレジストリに存在しません。 既定値は 100 です。
レジストリ パス: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
発行者キャッシュ時間
このエントリは、キャッシュタイムアウト間隔の長さをミリ秒単位で制御します。 Schannel SSP は、クライアント証明書の直接発行者だけでなく、クライアントの証明書チェーン内のすべての発行者をマップしようとします。 発行者がアカウントにマップされていない場合 (一般的なケース)、サーバーは同じ発行者名を繰り返しマップしようとすることがあり、その回数は 1 秒あたり数百回に及びます。
これを防ぐために、サーバーには負のキャッシュがあるため、発行者名がアカウントにマップされない場合はキャッシュに追加され、Schannel SSP はキャッシュ エントリの有効期限が切れるまで発行者名のマップを再試行しません。 パフォーマンス上の理由から、このキャッシュは保持されるため、同じ発行者はマップされなくなります。 既定では、このエントリはレジストリに存在しません。 既定値は 10 分です。
レジストリ パス: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
KeyExchangeAlgorithm キーのサイズ
これらの次のエントリは、既定ではレジストリに存在しない可能性があり、手動で作成する必要があります。 キー交換アルゴリズムの使用は、暗号スイートの順序を構成して制御する必要があります。 TLS/SSL 暗号スイート暗号化アルゴリズムの詳細については、 TLS/SSL (Schannel SSP) の暗号スイートに関するページを参照してください。
Windows 10 バージョン 1507 および Windows Server 2016 で追加されました。
レジストリ パス: HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\KeyExchangeAlgorithms\Diffie-Hellman
TLS クライアントでサポートされる Diffie-Hellman キー ビット長の最小範囲を指定するには、 ClientMinKeyBitLength
エントリを作成します。 エントリを作成したら、DWORD 値を目的のビット長に変更します。 構成されていない場合は、1024 ビットが最小値になります。
注
構成された楕円曲線によって、ECDHE キー交換の暗号の強度が決まります。 詳細については、「 トランスポート層セキュリティ (TLS) の管理」を参照してください。
最大キャッシュサイズ
このエントリは、キャッシュする TLS セッションの最大数を制御します。 MaximumCacheSize を 0
に設定すると、サーバー側のセッション キャッシュが無効にされ、セッションの再開が防止されます。 MaximumCacheSize を既定値より大きくすると、Lsass.exeが余分なメモリを消費します。 通常、各セッション キャッシュ要素には 2 KB から 4 KB のメモリが必要です。 既定では、このエントリはレジストリに存在しません。 既定値は 20,000 要素です。
レジストリ パス: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
メッセージング – フラグメント解析
このエントリは、受け入れられる TLS ハンドシェイク メッセージの最大許容サイズを制御します。 許可されたサイズを超えるメッセージは受け入れられません。TLS ハンドシェイクは失敗します。 これらのエントリは、既定ではレジストリに存在しません。
値を 0x0
に設定すると、断片化されたメッセージは処理されず、TLS ハンドシェイクが失敗します。 これにより、現在のマシン上の TLS クライアントまたはサーバーが TLS RFC に非準拠になります。
最大許容サイズは、最大 2^16 バイトまで増やすことができます。 クライアントまたはサーバーがネットワークから大量の未確認のデータを読み取って格納することは良い考えではなく、セキュリティ コンテキストごとに余分なメモリを消費します。
Windows 7 および Windows Server 2008 R2 で追加: 断片化された TLS/SSL ハンドシェイク メッセージを Windows XP、Windows Vista、または Windows Server 2008 の Internet Explorer で解析できる更新プログラムを使用できます。
レジストリ パス: HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Messaging
TLS クライアントが受け入れるフラグメント化 TLS ハンドシェイク メッセージの最大許容サイズを指定するには、 MessageLimitClient
エントリを作成します。 エントリを作成したら、DWORD 値を目的のビット長に変更します。 構成されていない場合、既定値は 0x8000
バイトです。
クライアント認証がない場合に TLS サーバーが受け入れる断片化された TLS ハンドシェイク メッセージの最大許容サイズを指定するには、 MessageLimitServer
エントリを作成します。 エントリを作成したら、DWORD 値を目的のビット長に変更します。 構成されていない場合、既定値は 0x4000 バイトです。
クライアント認証がある場合に TLS サーバーが受け入れるフラグメント化 TLS ハンドシェイク メッセージの最大許容サイズを指定するには、 MessageLimitServerClientAuth
エントリを作成します。 エントリを作成したら、DWORD 値を目的のビット長に変更します。 構成されていない場合、既定値は 0x8000 バイトです。
信頼できる発行者リスト送信
TLS サーバーは、クライアント認証を要求するときに、受け入れ可能な証明機関の識別名の一覧を送信する場合があります。 これは、TLS クライアントが適切な TLS クライアント証明書を選択するのに役立ちます。 Schannel ベースの TLS サーバーは、サーバーによって信頼された証明機関をパッシブ オブザーバーに公開し、TLS ハンドシェイクの過程で交換されるデータの量も増えるため、既定ではこの信頼された発行者リストを送信しません。 この値を 1 に設定すると、Schannel ベースのサーバーは信頼された発行者の一覧を送信します。
信頼された発行者の一覧を送信しないと、クライアント証明書の要求時にクライアントが送信する内容に影響する可能性があります。 たとえば、Microsoft Edge がクライアント認証要求を受信するときに表示されるのは、サーバーによって送信された証明機関のいずれかにチェーンでつながっているクライアント証明書のみです。 サーバーが一覧を送信しなかった場合、Microsoft Edge には、クライアントにインストールされているすべてのクライアントの証明書が表示されます。
この動作が望ましいことがあります。 たとえば、PKI 環境にクロス証明書が含まれている場合、クライアント証明書とサーバー証明書のルート CA は同じになりません。 そのため、Microsoft Edge では、サーバーの CA のいずれかにチェーンされている証明書を選択できません。 TLS クライアントは、サーバーが信頼された発行者リストを送信しない場合に、使用可能なクライアント証明書を提供する場合があります。 既定では、このエントリはレジストリに存在しません。
信頼された発行者の一覧を送信する既定の動作
Windows のバージョン | 既定の動作 |
---|---|
Windows Server 2012、Windows 8 以降 | 偽 |
レジストリ パス: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
サーバーキャッシュ時間
このエントリは、サーバー TLS セッション キャッシュ項目の有効期間をミリ秒単位で指定します。 既定値は 10 時間です。 値 が 0 の場合、サーバー上の TLS セッション キャッシュが無効になり、セッションの再開が防止されます。 前の ServerCacheTime を増やすと、既定値によって Lsass.exe が消費するメモリ量が多くなります。 通常、各セッション キャッシュ要素には 2 KB から 4 KB のメモリが必要です。 既定では、このエントリはレジストリに存在しません。
レジストリ パス: HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
既定のサーバー キャッシュ時間: 10 時間
TLS、DTLS、SSL プロトコルのバージョン設定
SChannel SSP では、TLS、DTLS、および SSL プロトコルのバージョンを実装します。 Windows リリースごとに、異なる プロトコル バージョンがサポートされます。 システム全体で使用可能な一連の (D)TLS および SSL バージョンは、AcquireCredentialsHandle 呼び出しでSCH_CREDENTIALS構造を指定する SSPI 呼び出し元によって制限できます (ただし、拡張できません)。 SSPI 呼び出し元では、プロトコルのバージョンを制限するのではなく、システムの既定値を使用することをお勧めします。
サポートされている (D)TLS または SSL プロトコルのバージョンは、次のいずれかの状態で存在できます。
- 有効: SSPI 呼び出し元が SCH_CREDENTIALS 構造を使用してこのプロトコル バージョンを明示的に無効にしない限り、Schannel SSP はサポート ピアとこのプロトコル バージョンをネゴシエートする可能性があります。
- 無効: Schannel SSP は、SSPI 呼び出し元が指定する設定に関係なく、このプロトコル バージョンをネゴシエートしません。
これらのレジストリ値は、次の形式を使用して、名前付きのレジストリ サブキーの下のプロトコル クライアントロールとサーバー ロールに対して個別に構成されます。
<SSL/TLS/DTLS> <major version number>.<minor version number><Client\Server>
これらのバージョン固有のサブキーは、次のレジストリ パスの下に作成できます。
HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
たとえば、バージョン固有のサブキーが含まれる有効なレジストリ パスを次に示します。
HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client
HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server
HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\DTLS 1.2\Client
システムの既定値をオーバーライドし、サポートされている (D)TLS または SSL プロトコルのバージョンをEnabled
状態に設定するには、対応するバージョン固有のサブキーの下にエントリ値が "Enabled
" の という名前の DWORD レジストリ値を作成します。
次の例では、TLS 1.0 クライアントが Enabled 状態に設定されています。
システムの既定値をオーバーライドし、サポートされている (D)TLS または SSL プロトコルのバージョンを Disabled
状態に設定するには、対応するバージョン固有のサブキーの下で、 Enabled
の DWORD レジストリ値を "0" に変更します。
次の例では、レジストリで DTLS 1.2 が無効になっています。
(D)TLS または SSL プロトコルのバージョンを Disabled
状態に切り替えると、システム全体で有効になっているプロトコル バージョンが不足し、同時に特定の SSPI 呼び出し元によって許可されるため、 AcquireCredentialsHandle 呼び出しが失敗する可能性があります。 さらに、 Enabled
(D)TLS と SSL のバージョンのセットを減らすと、リモート ピアとの相互運用性が損なわれます。
(D)TLS または SSL プロトコルのバージョン設定が変更されると、後続の AcquireCredentialsHandle 呼び出しによって開かれた資格情報ハンドルを使用して確立された接続に対して有効になります。 (D)TLS と SSL のクライアントおよびサーバー アプリケーションとサービスは、パフォーマンス上の理由から、複数の接続に対して資格情報ハンドルを再利用する傾向があります。 これらのアプリケーションで資格情報ハンドルを再取得するには、アプリケーションまたはサービスの再起動が必要な場合があります。
これらのレジストリ設定は Schannel SSP にのみ適用され、システムにインストールされる可能性のあるサードパーティ (D)TLS および SSL の実装には影響しません。
警告
この記事で明示的に詳しく説明されていない Schannel レジストリ設定を作成または調整することは、潜在的なリスクと、サポートされていない構成から生じる可能性のある意図しない結果のため、推奨されません。
PowerShell を使用した TLS 暗号スイートの管理については、 TLS コマンド リファレンスを参照してください。 グループ ポリシーを使用した TLS 設定の管理に関心がある場合は、「グループ ポリシーを 使用して TLS 暗号スイートの順序を構成する」を参照してください。