Debian
使用智能卡時,GnuPG 無法找到預設的簽名密鑰,但我只有一個。我究竟做錯了什麼?
我正在使用基於 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 <username@example.com> 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 username@example.com gpg: using "username@example.com" as default secret key for signing -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 test -----BEGIN PGP SIGNATURE-----
手冊說它應該開箱即用:
–default-key name 使用名稱作為簽名的預設使用者 ID。如果不使用,則預設使用者 ID 是在密鑰環中找到的第一個使用者 ID。
我正在使用 GnuPG 2.2.19:
$ gpg --version gpg (GnuPG) 2.2.19 libgcrypt 1.8.5
我已經應用了一個已知的 Docker 解決方法
GPG_TTY
,但無濟於事。我該怎麼做才能讓它發揮作用?
如果我沒看錯:您有兩個用於簽名的子密鑰,但一個處於離線狀態:
ssb# rsa2048 2012-01-16 [S] [expires: 2024-05-14] ssb rsa3072 2012-01-16 [S] [expires: 2024-05-15]
我希望看到:
ssb>
on both,這確認子鍵已被stubs替換。這可能就是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]
我想知道當您嘗試簽名操作時智能卡是否在讀卡器中。
您可以投入
default-key username@example.com
或default-key CB522FE0379DDF40A93400D7E4BC91FACDA9A65B
投入~/.gnupg/gpg.conf
以解決該問題。