在 Fedora 上使用 GnuPG 的 OpenPGP 智能卡

备注

以下说明要求 Nitrokey 3 至少安装有固件版本``1.4.0``。请参阅`固件更新<./firmware-update.html>`__ 了解如何更新。

支持 GnuPG 智能卡需要*scdaemon* 。在 Fedora 中,scdaemon 是 GnuPG 软件包的一部分。

备注

scdaemon 安装在``/usr/libexec/scdaemon``。该路径通常不在 PATH 环境变量中。

GnuPG 项目支持两种与 OpenPGP 智能卡连接的设置。

  1. GnuPG(带 CCID 驱动程序的 scdaemon) → 智能卡(如 Nitrokey)

    在此设置中,scdaemon 通过其内部 CCID 驱动程序和*libusb* 直接与 Nitrokey 通信。它需要设置 Udev 规则,因为*scdaemon* 在用户空间运行,具有登录用户的权限。

  2. GnuPG(带有 PCSC 库的 scdaemon) → pcscd → 智能卡(如 Nitrokey)

    在此设置中,scdaemon 与*pcscd* 通信,后者再与 Nitrokey 通信。

在 Fedora 上只支持第二种设置,因为 GnuPG 软件包的配置将 CCID 驱动程序设置为禁用,将 pcsc 支持设置为必需。相关配置可在规格文件`这里<https://src.fedoraproject.org/rpms/gnupg2/blob/rawhide/f/gnupg2.spec#_140>`__ 和`这里<https://src.fedoraproject.org/rpms/gnupg2/blob/rawhide/f/gnupg2.spec#_51>`__ 中找到。

故障排除

最新的 Fedora 38 版本在安装后应该可以正常工作。Fedora 的升级版本可能存在配置冲突,应按以下步骤检查。据报告,Fedora Silverblue 在 GnuPG 和智能卡方面存在问题。以下说明仅适用于*Fedora Workstation* 和*Fedora Server* 版本。

可通过``gpg --card-status`` 查询 Nitrokey 的信息,检查设置是否正确。

检查识别

使用 lsusb 命令验证 Nitrokey 是否被识别。输出结果应列出 Nitrokey,例如 Bus 001 Device 002:ID 20a0:42b2 Clay Logic Nitrokey 3

检查系统配置

  1. 确保通过``dnf install pcsc-lite`` 安装了*pcscd* 软件包。此外,必须启用*systemd* 服务和套接字,并通过``systemctl enable pcscd.socket pcscd.service && systemctl start pcscd.socket`` 启动。

  2. scdaemon 需要*libpcsclite* 库才能连接*pcscd* 。pcsc 库的路径可通过``echo "pcsc-driver /usr/lib64/libpcsclite.so.1" >> ~/.gnupg/scdaemon.conf`` 明确设置。或者,也可以使用符号链接提供该库,如下所示``ln -s /usr/lib64/libpcsclite.so.1 /usr/lib64/libpcsclite.so``。确保``~/.gnupg/scdaemon.conf`` 文件中没有与之冲突的设置。

  3. scdaemon 默认独占访问*pcscd* ,以避免同时修改卡上信息的潜在问题。如果其他客户端(通常是网络浏览器)访问该卡,即使只是读取,也会导致访问失败。可通过``echo "pcsc-shared" >> ~/.gnupg/scdaemon.conf``(GnuPG 2.2.28 或更高版本)启用共享访问。