我正在使用基于 Debian 的 Docker 映像,并且密钥环中只有一个可用密钥:
$ gpg -K
/tmp/test-keyring/pubring.kbx
-------------------------------
sec> rsa2048 2012-01-16 [C] [expires: 2024-05-15]
CB522FE0379DDF40A93400D7E4BC91FACDA9A65B
Card serial no. = 00nn 00nnnnnn
uid [ unknown] John Doe <[email protected]>
ssb# rsa2048 2012-01-16 [S] [expires: 2024-05-14]
ssb rsa3072 2012-01-16 [S] [expires: 2024-05-15]
正如您在这里看到的,共有三个键:
- 标记为 的主密钥
>
驻留在智能卡上。它被标记为仅验证密钥,因此不能用于签名。 #
此处不存在第二个辅助签名密钥的私有部分(标记为)。因此它不能用于签名。- 第三辅助签名密钥有一个可用的私有部分。这是这里唯一可用于签名的密钥。
同样,这里的最后一个密钥是唯一可用于签名目的的密钥。
唉,由于某种原因,GnuPG 无法看到它:
$ echo test | gpg --clearsign
gpg: no default secret key: Unusable public key
gpg: [stdin]: clear-sign failed: Unusable public key
但如果我直接指定用户 ID,签名就没有问题:
$ echo test | gpg --clearsign --default-key [email protected]
gpg: using "[email protected]" as default secret key for signing
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
test
-----BEGIN PGP SIGNATURE-----
手册说它应该开箱即用:
--default-key name 使用 name 作为签名的默认用户 ID。如果未使用此选项,则默认用户 ID 是密钥环中找到的第一个用户 ID。
我正在使用 GnuPG 2.2.19:
$ gpg --version
gpg (GnuPG) 2.2.19
libgcrypt 1.8.5
我已经申请了一个已知的 Docker 解决方法GPG_TTY
,无济于事。
我该怎么做才能让它发挥作用?
答案1
您可以 put或into来解决该问题。default-key [email protected]
default-key CB522FE0379DDF40A93400D7E4BC91FACDA9A65B
~/.gnupg/gpg.conf
答案2
如果我没看错的话:您有两个用于签名的子密钥,但其中一个处于离线状态:
ssb# rsa2048 2012-01-16 [S] [expires: 2024-05-14]
ssb rsa3072 2012-01-16 [S] [expires: 2024-05-15]
我希望ssb>
在两者上看到:,这确认子项已被替换为存根。这可能就是 gnupg 感到困惑的原因。
来自同一来源:
# 表示该密钥的私钥根本不可用。离线主密钥就是这种情况。
我的设置是这样的,有 3 个用于签名、加密和身份验证的子密钥。请注意,所有 3 个子项都驻留在智能卡上:
sec# rsa4096 2011-01-15 [C]
xxxxxxxxxxxxxxxxxxxx
uid [ unknown] xxxxxxxxxxxxx
ssb> rsa4096 2011-01-15 [S]
ssb> rsa4096 2011-01-15 [E]
ssb> rsa4096 2011-01-15 [A]
我想知道当您尝试签名操作时智能卡是否在读卡器中。
答案3
如果我碰巧拔掉智能卡并重复签名操作,问题就会消失。这是一个 GnuPG 错误,看来它将在下一个版本中修复。
Dockerized 环境与此无关。