我想使用我的GPS(2)子密钥来签署Git中的提交/标签。也就是说,我刚创建的只用于签名的RSA4096密钥,其长ID为B0##...
sec# ed25519/9F############## 2016-01-07 [expires: 2023-01-05]
Key fingerprint = FC08 HEX HEX HEX
uid [ultimate] MY NAME <MY.NAME@foo bar>
ssb rsa4096/C9############## 2016-01-07 [expires: 2022-01-05]
ssb ed25519/C6############## 2016-01-07 [expires: 2022-01-05]
ssb rsa4096/B0############## 2016-01-13 [expires: 2022-01-11]
我正在处理一个钥匙链,其中主密钥被删除(备份),作为“更好的密钥策略”
因此,我尝试为Git设置签名密钥
[user]
...
signingkey = B0##############
然而,提交和签名失败,显示如下信息:
> git commit -S -m "test commit"
gpg: skipped "B0##############": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object
如果gpg-agent正在运行。
我的第一个猜测是,Git不理解长密钥符号,而尝试使用短符号。
> gpg2 --list-secret-keys --keyid-format short
...
ssb rsa4096/DB###### 2016-01-13 [expires: 2022-01-11]
> ~/.gitconfig
[user]
...
signingkey = DB######
但是它也失败了。
> git commit -S -m "test commit short"
gpg: skipped "DB######": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object
所以,我想知道这里会出现什么问题,也许Git只能使用主密钥进行签名,但不理解使用子密钥的方法(或者我在某个地方弄错了)?
gpg2
设置为gpg.program
。由于您使用gpg2
运行GnuPG 2.0,因此gpg
将是不支持椭圆曲线的GnuPG 1。请注意,目前绝大多数人将无法处理您的签名,因为您的主密钥是椭圆曲线密钥。 - Jens Erat