PIVert 是一个符合 NIST SP 800-73 标准的 PIV 智能卡模拟器。你可以为 PIVert 提供一个包含证书及对应私钥的 PFX 文件,该工具会将卡片以真实 PIV 卡的形式模拟给 Windows。随后,这张卡片即可借助内置的智能卡重定向功能,用于 RDP、Citrix 和 VMWare Horizon 中的身份验证。
在一台从未使用过 PIVert 的全新机器上,第一步是安装 BixVReader 虚拟智能卡读卡器驱动。请注意,这会安装一个自签名受信任根证书颁发机构证书,因为该驱动是使用测试证书自签名的。安装步骤还会设置 AllowCertificatesWithNoEKU 组策略选项。如果没有此选项,则仅提供带有智能卡登录 EKU 的证书用于身份验证。启用此选项后,带有用户身份验证 EKU 的证书也可用于身份验证。
.\PIVert.exe install
[=] AllowCertificatesWithNoEKU on SmartCard Credential Provider not set, enabling...
[+] Enabled AllowCertificatesWithNoEKU on SmartCard Credential Provider
[=] Writing BixVReader.ini config to C:\Windows
[=] Installing driver signing certificate into Root and Trusted Publishers local machine store
[=] Installing driver MSI
[+] Installer completed
要使用 PFX 文件模拟 PIV 卡,只需将 PFX 文件和 PFX 密码作为命令行参数指定即可。
.\PIVert.exe .\Administrator.pfx password
[=] Connected to Smartcard Data Pipe
[=] Connected to Smartcard Event Pipe
[+] Connected Virtal Smart Card Driver
[+] Virtual card inserted
[=] Press ESC to exit, or any other key to remove and reinsert the virtual card?
[=] Unsupported INS ca with CLA 0
[=] Request for PIV DataObject: CardHolderUniqieID
[=] Request for PIV DataObject: CertPIVAuth
[=] Request for PIV DataObject: CertSign
[=] Request for PIV DataObject: CertKeyMan
[=] Request for PIV DataObject: CertCardAuth
[=] Request for PIV DataObject: KeyHistory
[=] Request for PIV DataObject: CertPIVAuth
[=] Request for PIV DataObject: CertSign
[=] Request for PIV DataObject: CertCardAuth
[=] Request for PIV DataObject: CardHolderUniqieID
[=] Request for PIV DataObject: CertKeyMan
[=] Request for PIV DataObject: KeyHistory
驱动中似乎确实存在一个 bug(也可能是我代码的问题 :D),有时 Windows 无法检测到虚拟卡的插入,原因是从虚拟卡读取 ATR 时出现问题。要解决此问题,你可以按除 ESC 之外的任意键,以虚拟方式移除并重新插入卡片。当出现这种情况时,你会注意到启动时不会出现上述 DataObject 请求。