Windows ログオンの問題のトラブルシューティング
この記事では、ユーザーが証明書やスマートカードを使用してログオンする際に Windows が提供するログとエラーメッセージについて説明します。これらのログは、認証の失敗をトラブルシューティングするために使用できる情報を提供します。
-
証明書と公開鍵インフラストラクチャ
-
Windows Active Directory は、ログオンするユーザーの証明書を管理するいくつかの証明書ストアを保持しています。
-
NTAuth 証明書ストア: Windows に認証するには、ユーザー証明書を直接発行する認証局(つまり、チェーンはサポートされていません)を NTAuth ストアに配置する必要があります。これらの証明書を表示するには、certutil プログラムから次のように入力します:
certutil –viewstore –enterprise NTAuth。 - ルートおよび中間証明書ストア: 通常、証明書ログオンシステムは単一の証明書しか提供できないため、チェーンが使用されている場合、すべての中間証明書ストアにこれらの証明書を含める必要があります。ルート証明書は信頼されたルートストアに、最後から2番目の証明書は NTAuth ストアに存在する必要があります。
- ログオン証明書拡張機能とグループポリシー: Windows は、EKU およびその他の証明書ポリシーの検証を強制するように構成できます。Microsoft ドキュメントを参照してください: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ff404287(v=ws.10)。
| レジストリポリシー | 説明 |
|---|---|
| AllowCertificatesWithNoEKU | 無効にすると、証明書にはスマートカードログオン拡張キー使用法 (EKU) を含める必要があります。 |
-
AllowSignatureOnlyKeys 既定では、Windows は RSA 復号化を許可しない証明書の秘密鍵を除外します。このオプションはそのフィルターを上書きします。 AllowTimeInvalidCertificates 既定では、Windows は期限切れの証明書を除外します。このオプションはそのフィルターを上書きします。 EnumerateECCCerts 楕円曲線認証を有効にします。 X509HintsNeeded 証明書に一意のユーザープリンシパル名 (UPN) が含まれていない場合、または曖昧な可能性がある場合、このオプションを使用すると、ユーザーは Windows ログオンアカウントを手動で指定できます。 UseCachedCRLOnlyAnd, IgnoreRevocationUnknownErrors 失効チェックを無効にします (通常はドメインコントローラーで設定されます)。 - ドメインコントローラー証明書: Kerberos 接続を認証するには、すべてのサーバーに適切な「ドメインコントローラー」証明書が必要です。これらは、「ローカルコンピューター証明書個人ストア」MMC スナップインメニューを使用して要求できます。
UPN 名と証明書マッピング
ユーザー証明書には、サブジェクト代替名拡張機能に一意のユーザープリンシパル名 (UPN) を含めることをお勧めします。
Active Directory の UPN 名
既定では、Active Directory のすべてのユーザーは、<samUsername>@<domainNetBios> および <samUsername>@<domainFQDN> のパターンに基づいた暗黙的な UPN を持っています。利用可能なドメインと FQDN は、フォレストの RootDSE エントリに含まれています。単一のドメインが RootDSE に複数の FQDN アドレスを登録できることに注意してください。
さらに、Active Directory のすべてのユーザーは、明示的な UPN と altUserPrincipalNames を持っています。これらは、ユーザーの UPN を指定する LDAP エントリです。
UPN でユーザーを検索する場合、Windows は最初に現在のドメイン(UPN を検索するプロセスの ID に基づく)で明示的な UPN を探し、次に代替 UPN を探します。一致するものがない場合、暗黙的な UPN を検索し、これはフォレスト内の異なるドメインに解決される可能性があります。
証明書マッピングサービス
証明書に明示的な UPN が含まれていない場合、Active Directory には、各用途の正確な公開証明書を「x509certificate」属性に保存するオプションがあります。このような証明書をユーザーに解決するために、コンピューターはこの属性を直接クエリできます(既定では単一ドメイン内)。
ユーザーがこの検索を高速化するユーザーアカウントを指定するオプションが提供されており、この機能はクロスドメイン環境でも使用できます。
フォレスト内に複数のドメインがあり、ユーザーが明示的にドメインを指定しない場合、Active Directory の rootDSE は証明書マッピングサービスの場所を指定します。これは通常、グローバルカタログマシンにあり、フォレスト内のすべての x509certificate 属性のキャッシュされたビューを持っています。このコンピューターは、証明書のみに基づいて、任意のドメイン内のユーザーアカウントを効率的に見つけるために使用できます。
ログオンドメインコントローラーの選択の制御
環境に複数のドメインコントローラーが含まれている場合、認証に使用されるドメインコントローラーを確認および制限し、ログを有効にして取得できるようにすることは有用です。
ドメインコントローラーの選択の制御
Windows に特定の Windows ドメインコントローラーをログオンに使用させるには、lmhosts ファイル (\Windows\System32\drivers\etc\lmhosts) を構成することで、Windows マシンが使用するドメインコントローラーのリストを明示的に設定できます。
通常、その場所に「lmhosts.sam」という名前のサンプルファイルがあります。単に次の行を含めます:
1.2.3.4 dcnetbiosname #PRE #DOM:mydomai
ここで、「1.2.3.4」は「mydomain」ドメイン内の「dcnetbiosname」という名前のドメインコントローラーの IP アドレスです。
再起動後、Windows マシンはその情報を使用して mydomain にログオンします。デバッグが完了したら、この構成を元に戻す必要があることに注意してください。
使用中のドメインコントローラーの特定
ログオン時、WindowsはユーザーをログオンさせたドメインコントローラーのMSDOS環境変数を設定します。これを確認するには、コマンドプロンプトを起動し、echo %LOGONSERVER% コマンドを実行します。
認証に関連するログは、このコマンドによって返されるコンピューターに保存されます。
アカウント監査イベントの有効化
デフォルトでは、Windowsドメインコントローラーは完全なアカウント監査ログを有効にしていません。これは、グループポリシーエディターのセキュリティ設定にある監査ポリシーを通じて制御できます。有効にすると、ドメインコントローラーはセキュリティログファイルに追加のイベントログ情報を生成します。

証明書検証ログ
- ### 証明書の有効性の確認
- スマートカード証明書がDER証明書としてエクスポートされている場合(秘密鍵は不要)、`certutil –verify user.cer` コマンドで検証できます。
CAPIログの有効化
-
ドメインコントローラーとユーザーのマシンで、イベントビューアーを開き、Microsoft/Windows/CAPI2/Operational Logsのログを有効にします。
-
CAPIログは、
CurrentControlSet\Services\crypt32のレジストリキーで制御できます。 -
Value Description DiagLevel (DWORD) 詳細レベル (0~5) DiagMatchAnyMask (QUADWORD) イベントフィルター (すべての場合 0xffffff を使用) DiagProcessName (MULTI_SZ) プロセス名によるフィルター (例: LSASS.exe)
CAPIログ
| Message | Description |
|---|---|
| Build Chain | LSAがCertGetCertificateChainを呼び出しました (結果を含む) |
| Verify Revocation | LSAがCertVerifyRevocationを呼び出しました (結果を含む) |
| X509 Objects | 詳細モードでは、証明書と証明書失効リスト (CRL) がAppData\LocalLow\Microsoft\X509Objectsにダンプされます |
| Verify Chain Policy | LSAがCertVerifyChainPolicyを呼び出しました (パラメーターを含む) |
エラーメッセージ
| Error code | Description |
|---|---|
| Certificate not trusted | コンピューターの中間証明書ストアおよび信頼されたルート証明書ストアにある証明書を使用して、スマートカード証明書を構築できませんでした。 |
| Certificate revocation check error | スマートカードのCRLを、証明書のCRL配布ポイントで指定されたアドレスからダウンロードできませんでした。失効チェックが義務付けられている場合、これによりログオンが成功しなくなります。 「証明書と公開鍵基盤」セクションを参照してください。 |
| Certificate Usage errors | 証明書がログオンに適していません。たとえば、サーバー証明書または署名証明書である可能性があります。 |
Kerberosログ
Kerberosログを有効にするには、ドメインコントローラーとエンドユーザーマシンで、次のレジストリ値を作成します。
| Hive | Value name | Value [DWORD] | | :—————————————————- | :————— | :———— |
-
CurrentControlSet\Control\Lsa\Kerberos\Parameters LogLevel 0x1 -
CurrentControlSet\Control\Lsa\Kerberos\Parameters KerbDebuglevel 0xffffffff -
CurrentControlSet\Services\Kdc KdcDebugLevel 0x1 -
CurrentControlSet\Services\Kdc KdcExtraLogLevel 0x1f
Kerberosログはシステムイベントログに出力されます。
- 「信頼されていない証明書」などのメッセージは診断が容易であるはずです。
- 2つのエラーコードは情報提供であり、安全に無視できます。
- KDC_ERR_PREAUTH_REQUIRED (古いドメインコントローラーとの下位互換性のために使用されます)
- 不明なエラー 0x4b
イベントログメッセージ
このセクションでは、ユーザーが証明書でログオンしたときにドメインコントローラーとワークステーションで予想されるログエントリについて説明します。
- ドメインコントローラーCAPI2ログ
- ドメインコントローラーセキュリティログ
- Virtual Delivery Agent (VDA) セキュリティログ
- VDA CAPIログ
- VDAシステムログ
ドメインコントローラーのCAPI2ログ
ログオン中、ドメインコントローラーは呼び出し元の証明書を検証し、次の形式で一連のログエントリを生成します。

最終的なイベントログメッセージは、ドメインコントローラー上のlsass.exeがVDAによって提供された証明書に基づいてチェーンを構築し、その有効性(失効を含む)を検証していることを示しています。結果は「ERROR_SUCCESS」として返されます。

ドメインコントローラーのセキュリティログ
ドメインコントローラーは一連のログオンイベントを表示し、主要なイベントは4768です。このイベントでは、証明書がKerberosチケット保証チケット(krbtgt)の発行に使用されます。
これより前のメッセージは、サーバーのマシンアカウントがドメインコントローラーに対して認証を行っていることを示しています。これに続くメッセージは、新しいkrbtgtに属するユーザーアカウントがドメインコントローラーに対して認証に使用されていることを示しています。

VDAのセキュリティログ
ログオンイベントに対応するVDAセキュリティ監査ログは、winlogon.exeを起点とするイベントID 4648のエントリです。

VDAのCAPIログ
このVDA CAPIログの例は、lsass.exeからの単一のチェーン構築および検証シーケンスを示しており、ドメインコントローラー証明書(dc.citrixtest.net)を検証しています。


VDAのシステムログ
Kerberosログが有効になっている場合、システムログにはエラーKDC_ERR_PREAUTH_REQUIRED(無視可能)と、Kerberosログオンが成功したことを示すWinlogonからのエントリが表示されます。

エンドユーザーのエラーメッセージ
このセクションでは、Windowsログオンページでユーザーに表示される一般的なエラーメッセージを一覧表示します。
| 表示されるエラーメッセージ | 説明と参照 |
|---|---|
| 無効なユーザー名またはパスワード | コンピューターは有効な証明書と秘密キーを持っていると認識していますが、Kerberosドメインコントローラーが接続を拒否しました。この記事の「Kerberosログ」セクションを参照してください。 |
| システムにログオンできませんでした。資格情報を検証できませんでした。/ 要求はサポートされていません | ドメインコントローラーに接続できないか、ドメインコントローラーがスマートカード認証をサポートする証明書で構成されていません。ドメインコントローラーに「Kerberos認証」、「ドメインコントローラー認証」、または「ドメインコントローラー」証明書を登録してください。既存の証明書が有効に見える場合でも、通常は試す価値があります。 |
| システムにログオンできませんでした。認証に使用されたスマートカード証明書は信頼されていませんでした。 | 中間証明書とルート証明書がローカルコンピューターにインストールされていません。証明書と公開キーインフラストラクチャを参照してください。 |
| 不正な要求 | これは通常、証明書の拡張機能が正しく設定されていないか、RSAキーが短すぎる (<2048ビット) ことを示します。 |
関連情報
- スマートカードログオン用にドメインを構成する: http://support.citrix.com/article/CTX206156
- スマートカードログオンポリシー: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ff404287(v=ws.10)
- CAPIログの有効化: http://social.technet.microsoft.com/wiki/contents/articles/242.troubleshooting-pki-problems-on-windows.aspx
- Kerberosログの有効化: https://support.microsoft.com/en-us/kb/262177
- サードパーティの証明機関でスマートカードログオンを有効にするためのガイドライン: https://support.microsoft.com/en-us/kb/281245