Windowsログオンの問題のトラブルシューティング
この記事では、ユーザーが証明書やスマートカードを使用してログオンする際にWindowsが提供するログとエラーメッセージについて説明します。これらのログは、認証の失敗をトラブルシューティングするために使用できる情報を提供します。
証明書と公開キー基盤
Windows Active Directoryは、ログオンするユーザーの証明書を管理する複数の証明書ストアを保持しています。
-
NTAuth 証明書ストア: Windowsに認証するには、ユーザー証明書を直接発行する証明機関(つまり、チェーンはサポートされていません)をNTAuthストアに配置する必要があります。これらの証明書を表示するには、certutilプログラムから「certutil –viewstore –enterprise NTAuth」と入力します。
-
ルートおよび中間証明書ストア: 通常、証明書ログオンシステムは単一の証明書しか提供できないため、チェーンが使用されている場合は、すべての中間証明書ストアにこれらの証明書を含める必要があります。ルート証明書は信頼されたルートストアに、最後から2番目の証明書はNTAuthストアにある必要があります。
-
ログオン証明書拡張機能とグループポリシー: Windowsは、EKUおよびその他の証明書ポリシーの検証を強制するように構成できます。Microsoftのドキュメントを参照してください:
<https://docs.microsoft.com/ja-jp/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ff404287(v=ws.10)>。
| レジストリポリシー | 説明 |
|---|---|
| AllowCertificatesWithNoEKU | 無効にすると、証明書にはスマートカードログオンの拡張キー使用法 (EKU) が含まれている必要があります。 |
| AllowSignatureOnlyKeys | デフォルトでは、WindowsはRSA復号化を許可しない証明書の秘密キーを除外します。このオプションはそのフィルターを上書きします。 |
| AllowTimeInvalidCertificates | デフォルトでは、Windowsは期限切れの証明書を除外します。このオプションはそのフィルターを上書きします。 |
| EnumerateECCCerts | 楕円曲線認証を有効にします。 |
| X509ヒントが必要 | 証明書に一意のユーザープリンシパル名 (UPN) が含まれていない場合、または曖昧である可能性がある場合、このオプションを使用すると、ユーザーはWindowsログオンアカウントを手動で指定できます。 |
| UseCachedCRLOnlyAnd, IgnoreRevocationUnknownErrors | 失効チェックを無効にします(通常、ドメインコントローラーで設定されます)。 |
-
ドメインコントローラー証明書: Kerberos接続を認証するには、すべてのサーバーに適切な「ドメインコントローラー」証明書が必要です。これらは、「ローカルコンピューター証明書個人ストア」MMCスナップインメニューを使用して要求できます。
UPN名と証明書のマッピング
ユーザー証明書には、サブジェクト代替名拡張に一意のユーザープリンシパル名 (UPN) を含めることをお勧めします。
アクティブ ディレクトリの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 が証明書マッピングサービスの場所を指定します。これは通常、グローバルカタログマシンにあり、フォレスト内のすべての x509 証明書属性のキャッシュされたビューを持っています。このコンピューターは、証明書のみに基づいて、任意のドメイン内のユーザーアカウントを効率的に見つけるために使用できます。
ログオンドメインコントローラーの選択を制御する
環境に複数のドメインコントローラーが含まれている場合、認証に使用されるドメインコントローラーを確認および制限できると、ログを有効にして取得できるため便利です。
ドメインコントローラーの選択を制御する
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 ドメインコントローラーは完全なアカウント監査ログを有効にしません。これは、グループポリシーエディターのセキュリティ設定にある監査ポリシーを通じて制御されます。有効にすると、ドメインコントローラーはセキュリティログファイルに追加のイベントログ情報を生成します。
ローカライズされた画像(/en-us/federated-authentication-service/1912-ltsr/media/fas-troubleshoot-logon-auditpolicy.png)
証明書検証ログ
証明書の有効性を確認する
スマートカード証明書がDER証明書としてエクスポートされた場合(秘密鍵は不要)、次のコマンドで検証できます: certutil –verify user.cer
CAPIログを有効にする
ドメインコントローラーとユーザーのマシンで、イベントビューアーを開き、Microsoft/Windows/CAPI2/Operational Logs のログを有効にします。
CAPIログは、次のレジストリキーで制御できます: CurrentControlSet\Services\crypt32。
| 値 | 説明 |
|---|---|
| DiagLevel (DWORD) | 詳細レベル (0~5) |
| DiagMatchAnyMask (QUADWORD) | イベントフィルター (すべてに 0xffffff を使用) |
| DiagProcessName (MULTI_SZ) | プロセス名でフィルター (例: LSASS.exe) |
CAPI ログ
| メッセージ | 説明 |
|---|---|
| チェーンの構築 | LSA が CertGetCertificateChain を呼び出しました (結果を含む) |
| 失効の検証 | LSA が CertVerifyRevocation を呼び出しました (結果を含む) |
| X509 オブジェクト | 詳細モードでは、証明書と証明書失効リスト (CRL) が AppData\LocalLow\Microsoft\X509Objects にダンプされます。 |
| チェーンポリシーの検証 | LSA が CertVerifyChainPolicy を呼び出しました (パラメーターを含む) |
エラーメッセージ
| エラーコード | 説明 |
|---|---|
| 証明書が信頼されていません | スマートカード証明書は、コンピューターの中間証明書ストアおよび信頼されたルート証明書ストアにある証明書を使用して構築できませんでした。 |
| 証明書失効チェックエラー | スマートカードのCRLは、証明書のCRL配布ポイントで指定されたアドレスからダウンロードできませんでした。失効チェックが義務付けられている場合、これによりログオンが成功しなくなります。「証明書と公開鍵インフラストラクチャ」(/ja-jp/federated-authentication-service/1912-ltsr/config-manage/troubleshoot-logon.html#certificates-and-public-key-infrastructure)セクションを参照してください。 |
| 証明書使用エラー | その証明書はログオンに適していません。たとえば、サーバー証明書または署名証明書である可能性があります。 |
Kerberosログ
Kerberosログを有効にするには、ドメインコントローラーとエンドユーザーマシンで、次のレジストリ値を作成します。
| ハイブ | 値の名前 | 値 [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 Ticket Granting Ticket (krbtgt) の発行に使用されます。
これより前のメッセージは、サーバーのマシンアカウントがドメインコントローラーに対して認証を行っていることを示しています。これに続くメッセージは、新しい krbtgt に属するユーザーアカウントがドメインコントローラーに対して認証に使用されていることを示しています。
VDA セキュリティログ
ログオンイベントに対応する VDA セキュリティ監査ログは、イベント ID 4648 を持つエントリで、winlogon.exe から発生します。
ローカライズされた画像(/en-us/federated-authentication-service/1912-ltsr/media/fas-troubleshoot-logon-vda-security-log.png)
VDA CAPI ログ
このVDA CAPIログの例は、lsass.exeからの単一のチェーン構築と検証シーケンスを示しており、ドメインコントローラー証明書 (dc.citrixtest.net) を検証しています。
ローカライズされた画像(/en-us/federated-authentication-service/1912-ltsr/media/fas-troubleshoot-logon-capi-log.png)
ローカライズされた画像(/en-us/federated-authentication-service/1912-ltsr/media/fas-troubleshoot-logon-capi-chainpolicy.png)
VDA システムログ
Kerberosログが有効になっている場合、システムログにはエラー KDC_ERR_PREAUTH_REQUIRED (これは無視できます) と、Kerberosログオンが成功したことを示すWinlogonからのエントリが表示されます。
ローカライズされた画像(/en-us/federated-authentication-service/1912-ltsr/media/fas-troubleshoot-logon-vda-system-log.png)
エンドユーザーのエラーメッセージ
このセクションでは、Windowsログオンページでユーザーに表示される一般的なエラーメッセージを一覧表示します。
| 表示されるエラーメッセージ | 説明と参照 |
|---|---|
| 無効なユーザー名またはパスワード | コンピューターは、有効な証明書と秘密キーを持っていると認識していますが、Kerberosドメインコントローラーが接続を拒否しました。この記事の「Kerberosログ」セクションを参照してください。 |
| システムはログオンできませんでした。資格情報を検証できませんでした。/ 要求はサポートされていません | ドメインコントローラーに接続できないか、ドメインコントローラーがスマートカード認証をサポートする証明書で構成されていません。「Kerberos 認証」、「ドメインコントローラー認証」、または「ドメインコントローラー」証明書をドメインコントローラーに登録してください。既存の証明書が有効に見える場合でも、これは通常試す価値があります。 |
| システムがログオンできませんでした。認証に使用されたスマートカード証明書は信頼されていませんでした。 | 中間証明書とルート証明書がローカルコンピューターにインストールされていません。証明書と公開キーインフラストラクチャを参照してください。 |
| 不正な要求 | これは通常、証明書の拡張機能が正しく設定されていないか、RSAキーが短すぎる(<2048ビット)ことを示します。 |
関連情報
-
スマートカードログオン用にドメインを構成する:
<http://support.citrix.com/article/CTX206156> -
スマートカードログオンポリシー:
<https://docs.microsoft.com/ja-jp/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/ja-jp/kb/262177> -
サードパーティの認証局でスマートカードログオンを有効にするためのガイドライン:
<https://support.microsoft.com/ja-jp/kb/281245>