我有一个在 Windows 上设置的 YubiKey,我正在尝试在 Manjaro(在 Chrome 上)上使用它。我在网上查了很多资料,但似乎无法解决这个问题。
使用时ykman list
,我得到以下信息:
YubiKey 5 NFC [OTP+FIDO+CCID] Serial: ...
我试着跟随这些说明在yubico
网站上。
另外,我发现ArchWiki 关于 YubiKey 的文章: 我已经libu2f-host
安装在我的机器上了,并且我已经添加了70-u2f.rules
到/etc/udev/rules.d/
目录(尽管说明说当您安装时libu2f-host
,规则应该自动添加)。
但是,当我打开 Chrome 并尝试登录应该使用 YubiKey 的网站时,出现以下错误:
这就是说:
No valid client certificate found in the request. No valid certificates found in the user's certificate store.
值得注意的是,如果我根本不连接 YubiKey,我会收到相同的错误消息!
那么,有没有办法让这项工作发挥作用呢?是不是少了一步?
答案1
看起来该网站正在等待客户端证书,因此它可能专门支持 YubiKey 的 PIV(智能卡)模式,而不是 FIDO U2F 模式。
为了支持这一点,您需要安装ccid
和opensc
软件包以及nss
该工具的软件包modutil
,然后需要将 Chrome 浏览器配置为使用/usr/lib/opensc-pkcs11.so
.为此,首先关闭浏览器的所有实例,然后使用如下命令:
modutil -dbdir sql:$HOME/.pki/nssdb/ -add "Smart card/YubiKey PKCS#11" -libfile /usr/lib/opensc-pkcs11.so
本质上,YubiKey PIV 模式模拟 CCID 兼容智能卡读卡器和 PKCS#11 兼容智能卡的组合。
(来源:ArchWiki YubiKey 页面的这一部分和CAC智能卡认证说明.)
CCID 是与 USB 连接智能卡读卡器等设备接口的硬件标准,PKCS#11 是与 PIV 智能卡通信的软件标准。为了弥合两者之间的差距,ccid
该服务的驱动程序pcscd
提供了一个 PC/SC 软件接口,用于与任何类似智能卡的设备任何目的,并opensc
提供一个使用低级 PC/SC 接口的库,并提供专门用于 PIV 目的的高级 PKCS#11 兼容软件接口。 (是的,这是一个复杂的、多层的系统。)
Chrome 与 Chromium 一样,使用 NSS Shared DB 进行$HOME/.pki/nssdb
证书管理。该命令添加了对 OpenSC PKCS#11 库的引用,该库用于访问兼容的智能卡读卡器和类似设备:本质上,它告诉任何使用共享 NSS DB 的设备(包括 Chrome)“您可以使用类似智能卡的设备作为用于身份验证的客户端证书的潜在来源,以下是与该计算机的智能卡读卡器子系统进行通信的方法。”
此命令不需要在运行时连接 YubiKey,但 Chrome 浏览器必须已连接不是运行命令时运行:如果浏览器正在运行,它将已经读取 NSS DB,并在退出时用旧值覆盖它,从而有效地撤消该命令。
由于某种原因,Chrome 不包含用于配置此设置的 GUI,因此需要包modutil
中的工具来配置它。nss
如果您需要对此设置进行故障排除,请首先插入 YubiKey 并用于opensc-tool --list-readers
验证 OpenSC 层是否可以识别 YubiKey。响应应该与此类似:
$ opensc-tool --list-readers
# Detected readers (pcsc)
Nr. Card Features Name
0 Yes Yubico YubiKey OTP+FIDO+CCID 00 00
如果这不起作用,请验证pcscd
守护进程是否正在运行。
然后使用opensc-tool --reader N --name -v
其中 N 是上一个命令输出最左侧列中 YubiKey 的“读卡器编号”(如果您没有其他类似智能卡读卡器的设备,则应为 0)来验证 OpenSC 是否识别该 PIV内容存在于 YubiKey 上。后一个命令的答案应包括这一行:
Card name: Personal Identity Verification Card
故障排除的第二部分是启动 Chrome 浏览器并转到“设置”->“高级”->“隐私和安全”->“管理证书”。此时,系统应弹出一个窗口,提示输入 YubiKey PIN:这是需要访问 YubiKey 才能显示其信息的副作用。这验证了 Chrome 现在可以使用 PKCS#11 库通过 OpenSC 访问 YubiKey PIV 功能。
输入 PIN 后,“管理证书”显示的“您的证书”页面应指示至少有一个可用的硬件支持的客户端证书。此时您可以选择查看证书:信息应与您的 YubiKey 上应有的信息相匹配,即,如果您对内容有疑问,您应该询问向您颁发 YubiKey 的个人或组织。
如果 Chrome 可以看到 YubiKey 上存储的证书,那么您现在应该可以访问 YubiKey PIV 验证的网站。一旦浏览器提示输入 YubiKey PIN,它将能够访问 YubiKey,直到您退出浏览器或拔下 YubiKey,因此每个浏览器会话不应多次提示输入 PIN。
如果插入 YubiKey 时浏览器已经在运行,则可能需要几秒钟的时间才能识别出 YubiKey 已插入。因此,插入密钥后,您应该等待几秒钟,然后再单击指向经过验证的网站。