所以我在使用gpg2.1签署文档时遇到问题。每当我尝试签名时,我都会:
λ dixonwille [~] → gpg2 --detach-sign Images/EinsteinWP.jpg
gpg: using "0xEC933DA229123788" as default secret key for signing
gpg: signing failed: No secret key
gpg: signing failed: No secret key
如上面的消息指定我在配置中设置了默认密钥。这是我的私人列表显示的内容:
λ dixonwille [~] → gpg2 -K --with-keygrip
/home/dixonwille/.gnupg/pubring.kbx
-----------------------------------
sec# rsa4096/0x496AC5165C585343 2017-01-14 [SC]
Key fingerprint = 2092 7961 2A0C EF20 83D0 8244 496A C516 5C58 5343
Keygrip = 308FF7DD37FB9E175378D76125FCB2BC4C5C225C
uid [ultimate] William E. Dixon <dixonwille@gmail.com>
uid [ultimate] William E. Dixon <dixonwille@hotmail.com>
uid [ultimate] William E. Dixon <will.dixon@acstechnologies.com>
uid [ultimate] [jpeg image of size 5910]
ssb rsa4096/0xD3522B485A800AFD 2017-01-14 [E] [expires: 2018-01-14]
Keygrip = 178AB20F816E5FAA31440968AD6EA06B0340FB90
ssb rsa4096/0xEC933DA229123788 2017-01-14 [S] [expires: 2018-01-14]
Keygrip = 89A90662E5908D5F271B87A5DC6D26F01B53C9EC
ssb rsa4096/0xBAA693EC561AD6D9 2017-01-14 [A] [expires: 2018-01-14]
Keygrip = 9D48688AF67C407BB91900BA07725CCE7E08B546
ssb rsa4096/0x7A3D17611B1FFDD2 2017-01-14 [S] [expires: 2018-01-14]
Keygrip = 50EE902E41E323600B02769FA2A96FE8C51D5A35
ssb rsa4096/0xB64824658CE421C8 2017-01-14 [A] [expires: 2018-01-14]
Keygrip = D3BD87D77B844A5AE54CEC0466353030A816441B
ssb rsa4096/0x7642000294227858 2017-01-16 [S] [expires: 2018-01-14]
Keygrip = B10269A98E3D357F3B32C155367B1CEDCAE998E8
ssb rsa4096/0x32C4DD59E753B43B 2017-01-16 [A] [expires: 2018-01-14]
Keygrip = 40E86DAAEDEE6BA714F26B09FBA38C35C4E4F264
现在所有这些密钥都没有私有对手。其中只有三个(0xD3522B485A800AFD,0xEC933DA229123788,0xBAA693EC561AD6D9)。为确保我运行gpg-connect-agent
,然后运行keyinfo --list
。
λ dixonwille [~] → gpg-connect-agent
> keyinfo --list
S KEYINFO 178AB20F816E5FAA31440968AD6EA06B0340FB90 D - - - P - - -
S KEYINFO 89A90662E5908D5F271B87A5DC6D26F01B53C9EC D - - - P - - -
S KEYINFO 9D48688AF67C407BB91900BA07725CCE7E08B546 D - - - P - - -
OK
>
因为你可以看到我的秘密存储在gpg-agent中。运行echo foo | gpg --clearsign -v --debug ipc
获取调试信息显示了这些有趣的行:
gpg: DBG: chan_5 -> HAVEKEY 308FF7DD37FB9E175378D76125FCB2BC4C5C225C
gpg: DBG: chan_5 <- ERR 67108881 No secret key <GPG Agent>
gpg: DBG: chan_5 -> HAVEKEY 89A90662E5908D5F271B87A5DC6D26F01B53C9EC
gpg: DBG: chan_5 <- OK
gpg: using "0xEC933DA229123788" as default secret key for signing
gpg: DBG: chan_5 -> HAVEKEY 308FF7DD37FB9E175378D76125FCB2BC4C5C225C 178AB20F816E5FAA31440968AD6EA06B0340FB90 89A90662E5908D5F271B87A5DC6D26F01B53C9EC 9D48688AF67C407BB91900BA07725CCE7E08B546 50EE902E41E323600B02769FA2A96FE8C51D5A35 D3BD87D77B844A5AE54CEC0466353030A816441B B10269A98E3D357F3B32C155367B1CEDCAE998E8 40E86DAAEDEE6BA714F26B09FBA38C35C4E4F264
gpg: DBG: chan_5 <- OK
gpg: using subkey 0x7642000294227858 instead of primary key 0x496AC5165C585343
gpg: writing to stdout
gpg: DBG: chan_5 -> KEYINFO B10269A98E3D357F3B32C155367B1CEDCAE998E8
gpg: DBG: chan_5 <- ERR 67108891 Not found <GPG Agent>
让我感到困惑。它首先检查我的Primary Master密钥是否有秘密,但是找不到它就失败了。然后它检查keygrip中的默认密钥,然后指出using "0xEC933DA229123788" as default secret key for signing
。那听起来不错。但是它会发送另一个HAVEKEY
,看起来像我的所有keygrips。这返回true,因为其中一个确实有秘密。所以它然后说明using subkey 0x7642000294227858 instead of primary key 0x496AC5165C585343
这是我做的最新签名密钥。
如何强制GnuPG2.1使用我在default-key中指定的密钥?看起来好像用GnuPG2.1感觉就好了。
如果我现在没有提及它,那么我知道有人可能会提到松树的答案。如果我运行ssh git@github.com
,我会弹出一个对话框来输入我的密钥密码(我使用我的ssh密钥的身份验证密钥并存储在gpg-agent中)。所以我知道我的gpg-agent.conf设置正确,gpg.conf设置正确。
答案 0 :(得分:2)
在&#39; .gnupg / gpg.conf&#39;中使用以下内容:
default-key 0xEC933DA229123788!
注意&#39;!&#39;在末尾。从gpg手册页:
&#34;使用gpg时,可以使用指定的主键或辅助键附加强制感叹号(!),而不是尝试计算要使用的主键或辅助键。&#34;