智能卡故障排除
本文介绍智能卡开发人员可用于帮助识别智能卡部署的证书问题的工具和服务。
调试和跟踪智能卡问题需要各种工具和方法。 以下部分提供有关可使用的工具和方法的指导。
- Certutil
- 使用 Windows 软件跟踪预处理器 (WPP) 进行调试和跟踪
- Kerberos 协议、密钥分发中心 (KDC) 以及 NTLM 调试和跟踪
- 智能卡服务
- 智能卡阅读器
- CryptoAPI 2.0 诊断
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 进行故障排除:
- Kerberos 和 LDAP 故障排除提示
- 适用于 Windows (WinDbg) 的 Windows 驱动程序工具包 (WDK) 和调试工具 。 可以使用此 SDK 中的跟踪日志工具来调试 Kerberos 身份验证失败。
若要开始跟踪,可以使用 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) 进程的共享服务实现。
若要检查智能卡服务是否正在运行:
- 按 Ctrl+Alt+DEL,然后选择“启动任务管理器”
- 在 “Windows 任务管理器 ”对话框中,选择“ 服务 ”选项卡
- 选择 “名称” 列以按字母顺序对列表进行排序,然后键入 s
- 在 “名称” 列中,查找 SCardSvr,然后在 “状态” 列下查看服务是否正在运行或已停止
重启智能卡服务:
- 在命令提示符下以管理员身份运行
- 如果显示“用户帐户控制”对话框,请确认其显示的操作是所需操作,然后选择“是”
- 在命令提示符下,键入
net stop SCardSvr
- 在命令提示符下,键入
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:\>
智能卡阅读器
与连接到计算机的任何设备一样,设备管理器可用于查看属性并开始调试过程。
若要检查智能卡读取器是否正常工作:
- 导航到 “计算机”
- 右键单击“ 计算机”,然后选择“ 属性”
- 在“任务”下,选择“设备管理器
- 在“设备管理器”中,展开“智能卡读取器”,选择要检查的智能卡读取器的名称,然后选择“属性”
注意
如果智能卡阅读器未在设备管理器中列出,请在“操作”菜单中选择“扫描硬件更改”。
CryptoAPI 2.0 诊断
CryptoAPI 2.0 诊断在支持 CryptoAPI 2.0 的 Windows 版本中可用,可帮助你排查公钥基础结构 (PKI) 问题。
CryptoAPI 2.0 诊断在 Windows 事件日志中记录事件。 这些日志包含有关证书链验证、证书存储操作和签名验证的详细信息。 利用此信息,可以更轻松地识别问题的原因,并减少诊断所需的时间。
有关 CryptoAPI 2.0 诊断的详细信息,请参阅 企业 PKI 故障排除。