在我更新到 Windows 10 1803 (x64) 后,这种情况最近才开始出现。我已将 Gpg4Win 更新到最新版本 (3.1.2),但这并没有解决任何问题。
我尝试了以下方法:
- 删除微型驱动程序 (https://forum.yubico.com/viewtopicbe08.html?f=35&t=2756)
- 改变 chuid (https://forum.yubico.com/viewtopicb199.html?f=35&t=2757)
- 卸载与 Yubikey 相关的所有驱动程序,然后使用 Nirsoft 的 Usbdeview 重新安装它们
- 从中删除 Yubikey 的条目
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Calais\SmartCards
- 使用 Yubico 的工具禁用并重新启用 CCID 接口
- 重启智能卡服务
- 终止并重新启动 scdaemon 和 gpg-connect-agent
- (显然)重新启动
这些都没能解决问题,我现在几乎没有主意了。这是我的机器上唯一的智能卡读卡器(除了 TPM),Yubikey 已经过测试,可以在 Linux 上与 gpg 配合使用。
Yubikey 显示为Identity Device (NIST SP 800-73 [PIV])
一些日志:
Gpg 返回:
$ gpg --card-status
gpg: selecting openpgp failed: No such device
gpg: OpenPGP card not available: No such device
Certutil 返回:
$ certutil -scinfo
=======================================================
Analyzing card in reader: Yubico Yubikey 4 OTP+U2F+CCID 0
--------------===========================--------------
================ Certificate 0 ================
--- Reader: Yubico Yubikey 4 OTP+U2F+CCID 0
--- Card: Identity Device (NIST SP 800-73 [PIV])
Provider = Microsoft Base Smart Card Crypto Provider
Key Container = (null) [Default Container]
Cannot open the AT_SIGNATURE key for reader: Yubico Yubikey 4 OTP+U2F+CCID 0
Cannot open the AT_KEYEXCHANGE key for reader: Yubico Yubikey 4 OTP+U2F+CCID 0
--------------===========================--------------
================ Certificate 0 ================
--- Reader: Yubico Yubikey 4 OTP+U2F+CCID 0
--- Card: Identity Device (NIST SP 800-73 [PIV])
Provider = Microsoft Smart Card Key Storage Provider
Key Container = (null) [Default Container]
Cannot open the key for reader: Yubico Yubikey 4 OTP+U2F+CCID 0
--------------===========================--------------
Done.
CertUtil: -SCInfo command completed successfully.
Scdaemon 的日志显示了一些(我认为)可能有趣的东西,因为它似乎检测到了读者:
2018-07-26 18:13:36 scdaemon[13612] detected reader 'Windows Hello for Business 9'
2018-07-26 18:13:36 scdaemon[13612] detected reader 'Yubico Yubikey 4 OTP+U2F+CCID 0'
2018-07-26 18:13:36 scdaemon[13612] reader slot 0: not connected
2018-07-26 18:13:36 scdaemon[13612] DBG: leave: apdu_open_reader => slot=0 [pc/sc]
2018-07-26 18:13:36 scdaemon[13612] DBG: enter: apdu_connect: slot=0
2018-07-26 18:13:36 scdaemon[13612] pcsc_control failed: insufficient buffer (0x80100008)
2018-07-26 18:13:36 scdaemon[13612] pcsc_vendor_specific_init: GET_FEATURE_REQUEST failed: 65538
2018-07-26 18:13:36 scdaemon[13612] reader slot 0: active protocol: T1
2018-07-26 18:13:36 scdaemon[13612] slot 0: ATR=3B 8D 01 80 FB A0 00 00 03 97 42 54 46 59 04 01 CF
2018-07-26 18:13:36 scdaemon[13612] DBG: pcsc_get_status_change: changed present excl inuse
2018-07-26 18:13:36 scdaemon[13612] DBG: leave: apdu_connect => sw=0x0
2018-07-26 18:13:36 scdaemon[13612] DBG: send apdu: c=00 i=A4 p1=00 p2=0C lc=2 le=-1 em=0
2018-07-26 18:13:36 scdaemon[13612] DBG: PCSC_data: 00 A4 00 0C 02 3F 00
2018-07-26 18:13:36 scdaemon[13612] DBG: response: sw=6A82 datalen=0
2018-07-26 18:13:36 scdaemon[13612] DBG: send apdu: c=00 i=A4 p1=04 p2=00 lc=6 le=-1 em=0
2018-07-26 18:13:36 scdaemon[13612] DBG: PCSC_data: 00 A4 04 00 06 D2 76 00 01 24 01
2018-07-26 18:13:36 scdaemon[13612] DBG: response: sw=6A82 datalen=0
2018-07-26 18:13:36 scdaemon[13612] can't select application 'openpgp': Not supported
2018-07-26 18:13:36 scdaemon[13612] DBG: enter: apdu_close_reader: slot=0
2018-07-26 18:13:36 scdaemon[13612] DBG: enter: apdu_disconnect: slot=0
2018-07-26 18:13:36 scdaemon[13612] DBG: leave: apdu_disconnect => sw=0x0
2018-07-26 18:13:36 scdaemon[13612] DBG: leave: apdu_close_reader => 0x0 (close_reader)
2018-07-26 18:13:36 scdaemon[13612] DBG: chan_0x00000188 -> ERR 100696144 No such device <SCD>
答案1
问题似乎是在安装 Office365 时为其添加了虚拟智能卡读卡器Windows Hello for Business
,这是一种基于 Microsoft Passport 的身份验证机制。
我认为(根据日志)这会导致scdaemon
崩溃,因为它可以找到两个读取器:这个和 Yubikey;但它没有尝试初始化后者,在尝试Windows Hello for Business
虚拟读取器后立即失败。certutil 的日志还显示无法检索我机器上的 Windows Hello 虚拟读取器的证书,所以这可能是导致scdaemon
崩溃的原因。
Yubico Yubikey 4 OTP+U2F+CCID 0
通过在智能卡选项卡下的 Kleopatra 设置中设置(我从日志中获得的名称)解决了该问题。
YMMV,但我的建议如下:
smartcards
将调试级别设置为 4,并在 Kleopatra 选项卡上设置日志文件的路径- 在日志文件中查找 Yubikey 智能卡的名称:应该有一行以 开头
detected reader
,在我的情况下是这样的detected reader 'Yubico Yubikey 4 OTP+U2F+CCID 0'
- 将该名称复制到
Connect to reader at port N
Kleopatra 上的字段中 - 您现在可以再次禁用日志记录以减少产生的垃圾。
请参阅图片以供参考: