智能卡故障排除

本文介绍智能卡开发人员可用于帮助识别智能卡部署的证书问题的工具和服务。

调试和跟踪智能卡问题需要各种工具和方法。 以下部分提供有关可使用的工具和方法的指导。

Certutil

有关 Certutil 的完整说明,包括演示如何使用它的示例,请参阅 Certutil [W2012]。

列出智能卡上可用的证书

若要列出智能卡上可用的证书,请键入 certutil.exe -scinfo

注意

此操作不需要输入 PIN。 如果系统提示输入 PIN,可以按 ESC。

删除智能卡上的证书

每个证书都包含在容器中。 删除智能卡上的证书时,会删除证书的容器。

若要查找容器值,请键入 certutil.exe -scinfo

若要删除容器,请键入 certutil.exe -delkey -csp "Microsoft Base Smart Card Crypto Provider" "<ContainerValue>"

使用 WPP 进行调试和跟踪

WPP 简化了跟踪提供程序的操作。 它为跟踪提供程序提供了一种记录实时二进制消息的机制。 记录的消息可以转换为操作的用户可读跟踪。 有关详细信息,请参阅 WPP 诊断 - NDIS 博客

启用跟踪

使用 WPP,使用以下命令之一启用跟踪:

tracelog.exe -kd -rt -start <FriendlyName> -guid <GUID> -f .<LogFileName*>.etl -flags <flags> -ft 1
logman.exe start <FriendlyName> -ets -p {<GUID>} -<Flags> -ft 1 -rt -o .<LogFileName><em>.etl -mode 0x00080000</em>

可以使用下表中的参数。

友好名称 GUID Flags
scardsvr 13038e47-ffec-425d-bc69-5707708075fe 0xffff
winscard 3fce7c5f-fb3b-4bce-a9d8-55cc0ce1cf01 0xffff
basecsp 133a980d-035d-4e2d-b250-94577ad8fced 0x7
scksp 133a980d-035d-4e2d-b250-94577ad8fced 0x7
msclmd fb36caf4-582b-4604-8841-9263574c4f2c 0x7
credprov dba0e0e0-505a-4ab6-aa3f-22f6f743b480 0xffff
certprop 30eae751-411f-414c-988b-a8bfa8913f49 0xffff
scfilter eed7f3c9-62ba-400e-a001-658869df9a91 0xffff
wudfusbccid a3c09ba3-2f62-4be5-a50f-8278a646ac9d 0xffff

示例

为 SCardSvr 服务启用跟踪:

tracelog.exe -kd -rt -start scardsvr -guid \#13038e47-ffec-425d-bc69-5707708075fe -f .\scardsvr.etl -flags 0xffff -ft 1
logman.exe start scardsvr -ets -p {13038e47-ffec-425d-bc69-5707708075fe} 0xffff -ft 1 -rt -o .\scardsvr.etl -mode 0x00080000

为 启用跟踪 scfilter.sys

tracelog.exe -kd -rt -start scfilter -guid \#eed7f3c9-62ba-400e-a001-658869df9a91 -f .\scfilter.etl -flags 0xffff -ft 1

停止跟踪

使用 WPP,使用以下命令之一停止跟踪:

tracelog.exe -stop <*FriendlyName*>
logman.exe -stop <*FriendlyName*> -ets

例如,若要停止跟踪,请执行:

tracelog.exe -stop scardsvr
logman.exe -stop scardsvr -ets

Kerberos 协议、KDC 和 NTLM 调试和跟踪

可以使用这些资源对以下协议和 KDC 进行故障排除:

若要开始跟踪,可以使用 Tracelog。 不同的组件使用不同的控件 GUID,如这些示例中所述。 有关详细信息,请参阅 Tracelog

NTLM

若要为 NTLM 身份验证启用跟踪,请在命令行上运行以下命令:

tracelog.exe -kd -rt -start ntlm -guid \#5BBB6C18-AA45-49b1-A15F-085F7ED0AA90 -f .\ntlm.etl -flags 0x15003 -ft 1

若要停止跟踪 NTLM 身份验证,请运行以下命令:

tracelog -stop ntlm

Kerberos 身份验证

若要为 Kerberos 身份验证启用跟踪,请运行以下命令:

tracelog.exe -kd -rt -start kerb -guid \#6B510852-3583-4e2d-AFFE-A67F9F223438 -f .\kerb.etl -flags 0x43 -ft 1

若要停止跟踪 Kerberos 身份验证,请运行以下命令:

tracelog.exe -stop kerb

Kdc

若要为 KDC 启用跟踪,请在命令行上运行以下命令:

tracelog.exe -kd -rt -start kdc -guid \#1BBA8B19-7F31-43c0-9643-6E911F79A06B -f .\kdc.etl -flags 0x803 -ft 1

若要停止跟踪 KDC,请在命令行上运行以下命令:

tracelog.exe -stop kdc

若要停止从远程计算机进行跟踪,请运行以下命令:

logman.exe -s <ComputerName>

注意

logman.exe 的默认位置为 %systemroot%system32。 使用 -s 选项提供计算机名称。

使用注册表配置跟踪

还可以通过编辑下表中显示的 Kerberos 注册表值来配置跟踪。

元素 注册表项设置
NTLM HKEY_LOCAL_MACHINESYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
值名称:NtLmInfoLevel
值类型:DWORD
值数据:c0015003
Kerberos HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos
值名称:LogToFile
值类型:DWORD
值数据:00000001

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
值名称:KerbDebugLevel
值类型:DWORD
值数据:c0000043

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters
值名称:LogToFile
值类型:DWORD
值数据:00000001
Kdc HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kdc
值名称:KdcDebugLevel
值类型:DWORD
值数据:c0000803

如果使用 Tracelog,请在当前目录中查找以下日志文件: kerb.etl/kdc.etl/ntlm.etl

如果使用了上表中显示的注册表项设置,请在以下位置查找跟踪日志文件:

  • Ntlm: %systemroot%\tracing\msv1_0
  • Kerberos: %systemroot%\tracing\kerberos
  • Kdc: %systemroot%\tracing\kdcsvc

若要解码事件跟踪文件,可以使用 Tracefmt (tracefmt.exe) 。 Tracefmt 是一个命令行工具,用于格式化和显示来自事件跟踪日志文件 (.etl) 或实时跟踪会话的跟踪消息。 Tracefmt 可以在命令提示符窗口中显示消息,也可以将它们保存在文本文件中。 它位于 Windows 驱动程序工具包的 \tools\tracing 子目录中, (WDK) 。 有关详细信息,请参阅 Tracefmt

智能卡服务

智能卡资源管理器服务在本地服务的上下文中运行。 它作为服务主机 (svchost) 进程的共享服务实现。

若要检查智能卡服务是否正在运行:

  1. 按 Ctrl+Alt+DEL,然后选择“启动任务管理器
  2. “Windows 任务管理器 ”对话框中,选择“ 服务 ”选项卡
  3. 选择 “名称” 列以按字母顺序对列表进行排序,然后键入 s
  4. “名称” 列中,查找 SCardSvr,然后在 “状态” 列下查看服务是否正在运行或已停止

重启智能卡服务:

  1. 在命令提示符下以管理员身份运行
  2. 如果显示“用户帐户控制”对话框,请确认其显示的操作是所需操作,然后选择“
  3. 在命令提示符下,键入 net stop SCardSvr
  4. 在命令提示符下,键入 net start SCardSvr

可以在命令提示符处使用以下命令来检查服务是否正在运行:sc queryex scardsvr

下面的代码示例是此命令的示例输出:

SERVICE_NAME: scardsvr
    TYPE        : 20 WIN32_SHARE_PROCESS
    STATE       : 4 RUNNING
                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
    WIN32_EXIT_CODE  : 0 (0x0)
    SERVICE_EXIT_CODE : 0 (0x0)
    CHECKPOINT     : 0x0
    WAIT_HINT     : 0x0
    PID        : 1320
    FLAGS       :
C:\>

智能卡阅读器

与连接到计算机的任何设备一样,设备管理器可用于查看属性并开始调试过程。

若要检查智能卡读取器是否正常工作:

  1. 导航到 “计算机”
  2. 右键单击“ 计算机”,然后选择“ 属性”
  3. “任务”下,选择“设备管理器
  4. 在“设备管理器”中,展开“智能卡读取器”,选择要检查的智能卡读取器的名称,然后选择“属性”

注意

如果智能卡阅读器未在设备管理器中列出,请在“操作”菜单中选择“扫描硬件更改”。

CryptoAPI 2.0 诊断

CryptoAPI 2.0 诊断在支持 CryptoAPI 2.0 的 Windows 版本中可用,可帮助你排查公钥基础结构 (PKI) 问题。

CryptoAPI 2.0 诊断在 Windows 事件日志中记录事件。 这些日志包含有关证书链验证、证书存储操作和签名验证的详细信息。 利用此信息,可以更轻松地识别问题的原因,并减少诊断所需的时间。

有关 CryptoAPI 2.0 诊断的详细信息,请参阅 企业 PKI 故障排除

另请参阅

智能卡技术参考