フェデレーション認証サービスによるWindowsログオンの問題のトラブルシューティング
ここでは、ユーザーが証明書やスマートカードを使用してログオンするときに、Windowsが提供するログおよびエラーメッセージについて説明します。 これらのログには、認証の失敗をトラブルシューティングするために使用できる情報が含まれています。
証明書と公開キー基盤
Windows Active Directoryは、ユーザーのログオン用証明書を管理するいくつかの証明書ストアを保守しています。
- NTAuth証明書ストア:Windowsへの認証のため、ユーザー証明書をすぐに発行するCA(つまりチェーンはサポートされません)をNTAuthストアに配置する必要があります。 これらの証明書を表示するには、certutilプログラムから次のように入力します。certutil –viewstore –enterprise NTAuth
- ルートおよび中間証明書ストア:通常、証明書ログオンシステムは単一の証明書のみを提供できるため、チェーンが使用中の場合、すべてのマシン上の中間証明書ストアがこれらの証明書を含んでいる必要があります。 ルート証明書は信頼されたルートストアに、最後から2番目の証明書はNTAuthストアにある必要があります。
- ログオン証明書拡張とグループポリシー:EKUや他の証明書ポリシーを強制的に検証するようにWindowsを構成できます。Microsoftのドキュメントサイトを参照してください:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ff404287(v=ws.10)?redirectedfrom=MSDN。
レジストリポリシー | 説明 |
---|---|
AllowCertificatesWithNoEKU | 無効にすると、証明書にスマートカードログオン拡張キー使用法(Extended Key Usage:EKU)が含まれる必要があります。 |
AllowSignatureOnlyKeys | デフォルトで、Windowsは、RSA復号化を許可しない証明書秘密キーを拒否します。このオプションは、そのフィルターを上書きします。 |
AllowTimeInvalidCertificates | デフォルトで、Windowsは期限切れの証明書を拒否します。このオプションは、そのフィルターを上書きします。 |
EnumerateECCCerts | 楕円曲線認証を有効化します。 |
X509HintsNeeded | 証明書に一意のユーザープリンシパル名(UPN)が含まれないか、複数の解釈が可能な場合、このオプションを使用すると、ユーザーが手動でWindowsログオンアカウントを指定できます。 |
UseCachedCRLOnlyAnd、IgnoreRevocationUnknownErrors | 失効チェックを無効にします(通常ドメインコントローラー上で設定)。 |
- ドメインコントローラー証明書:Kerberos接続を認証するには、すべてのサーバーが適切な「ドメインコントローラー」証明書を持っている必要があります。 これらは、[Local Computer Certificate Personal Store]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行を追加します。
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
値 | 説明 |
---|---|
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をダウンロードできませんでした。失効チェックが必須の場合、これが原因となってログオンが失敗します。証明書と公開キー基盤」を参照してください。 |
証明書使用状況エラー | 証明書がログオンに適していません。たとえば、サーバー証明書または署名証明書の可能性があります。 |
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ログ
- ドメインコントローラーセキュリティログ
- VDAセキュリティログ
- VDA CAPIログ
- VDAシステムログ
ドメインコントローラーCAPI2ログ
ログオン時にドメインコントローラーは発信者の証明書を検証し、一連のログエントリを次の形式で作成します。
最終イベントログメッセージは、VDAによって提供される証明書に基づいてチェーンを作成するドメインコントローラー上にlsass.exeを表示し、その妥当性(失効など)を検証します。結果は「ERROR_SUCCESS」として戻されます。
ドメインコントローラーセキュリティログ
ドメインコントローラーは一連のログオンイベントを表示します。主要なイベントは4768で、証明書を使用してKerberos Ticket Granting Ticket(krbtgt)を発行します。
これより前のメッセージは、ドメインコントローラーに対して認証するサーバーのマシンアカウントを表示します。 これより後のメッセージは、ドメインコントローラーに対して認証するために使用される新しいkrbtgtに属するユーザーアカウントを表示します。
VDAセキュリティログ
ログオンイベントに対応するVDAセキュリティ監査ログはイベントIDが4648のエントリで、winlogon.exeにより記録されます。
VDA CAPIログ
このサンプルのVDA CAPIログは、lsass.exeから単一のチェーンビルドおよび検証シーケンスを示しており、ドメインコントローラー証明書(dc.citrixtest.net)を検証しています。
VDAシステムログ
Kerberosログが有効化されている場合、システムログは、エラーKDC_ERR_PREAUTH_REQUIRED(無視してかまいません)と、Kerberosログオンが成功したことを示すWinlogonからのエントリを表示します。
エンドユーザーエラーメッセージ
ここでは、Windowsログオンページでユーザーに表示される一般的なエラーメッセージの一覧を示します。
表示されるエラーメッセージ | 説明および参照先 |
---|---|
無効なユーザー名またはパスワードです。 | コンピューターはユーザーが有効な証明書および秘密キーを持っていると判断していますが、Kerberosドメインコントローラーが接続を拒否しました。この記事の「Kerberosログ」を参照してください。 |
システムにログオンできませんでした。資格情報を確認できませんでした。 | ドメインコントローラーに通信できないか、ドメインコントローラーに適切な証明書がインストールされていません。 |
要求がサポートされていません | CTX206156の記述に従って、「ドメインコントローラー」および「ドメインコントローラーの認証」証明書をドメインコントローラーに再登録します。これは通常試す価値があります。既存の証明書が有効に見える場合でも同様です。 |
システムにログオンできませんでした。認証のために使用されたスマートカード証明書が信頼できませんでした。 | 中間証明書とルート証明書がローカルコンピューターにインストールされていません。ドメイン不参加のコンピューターへのスマートカード証明書のインストール手順は、CTX206156を参照してください。この記事の証明書と公開キー基盤も参照してください。 |
アカウントでスマートカードログオンがサポートされていないためログオンできません。 | ワークグループユーザーアカウントが、スマートカードログオンに対して完全には構成されていません。 |
要求されたキーが存在しません | 証明書が秘密キーを参照しており、アクセスできません。PIVカードが完全に構成されていないか、CHUIDまたはCCCファイルがない場合に発生することがあります。 |
スマートカードの使用を試行中にエラーが発生しました | スマートカードミドルウェアが正しくインストールされていません。スマートカードのインストール手順はCTX206156を参照してください。 |
スマートカードを挿入してください | スマートカードまたはリーダーが検出されませんでした。スマートカードが挿入されている場合、このメッセージはハードウェアまたはミドルウェアに問題があることを示します。スマートカードのインストール手順はCTX206156を参照してください。 |
PINが不正確です | ユーザーが入力したPINをスマートカードが拒否しました。 |
有効なスマートカード証明書が見つかりませんでした。 | T証明書の拡張子が正しく設定されていないか、RSAキーが短すぎます(2048ビット未満)。有効なスマートカード証明書の生成について詳しくは、CTX206901を参照してください。 |
スマートカードがブロックされています | スマートカードがロックされています(たとえば、ユーザーが不正確なPINを複数回入力しました)。管理者は、スマートカードベンダー提供のツールを使用してカードのPINロック解除コード(puk)を取得し、ユーザーPINをリセットできる場合があります。pukコードが利用できないかロックアウトされている場合、カードを工場出荷時の設定にリセットする必要があります。 |
不正な要求 | スマートカード秘密キーが、ドメインコントローラーが必要とする暗号化をサポートしていません。たとえば、ドメインコントローラーが「秘密キー復号化」を要求したのに、スマートカードが署名しかサポートしていないことがあります。これは通常、証明書の拡張子が正しく設定されていないか、RSAキーが短すぎることを示します(2048ビット未満)。有効なスマートカード証明書の生成について詳しくは、CTX206901を参照してください。 |
関連情報
- スマートカードログオン用のドメインを構成します:https://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)?redirectedfrom=MSDN
- CAPIログの有効化:https://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