使用OpenPGP子项进行签名提交失败

THX*_*THX 6 git gnupg

我想使用我的一个GPS(2)子键在Git Ie中签名提交/标签,这是我新创建的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]
Run Code Online (Sandbox Code Playgroud)

我正在处理一个密钥环,其中主密钥已被删除(备份)作为"更好的密钥策略"

所以,我试着为Git设置签名密钥

[user]
    ...
    signingkey = B0##############
Run Code Online (Sandbox Code Playgroud)

但是,提交和签名失败了

> 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
Run Code Online (Sandbox Code Playgroud)

gpg-agent启动并运行的地方.

我的第一个猜测是,Git不理解长按键符号并尝试使用短符号

> gpg2 --list-secret-keys  --keyid-format short
...
ssb   rsa4096/DB###### 2016-01-13 [expires: 2022-01-11]

> ~/.gitconfig
[user]
   ...
   signingkey = DB######
Run Code Online (Sandbox Code Playgroud)

但哪也失败了

> 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
Run Code Online (Sandbox Code Playgroud)

所以,我想知道在这里打破了什么,如果Git只能使用主密钥进行签名但是不理解子密钥的使用(或者如果我在某处搞砸了自己)?

Jen*_*rat 15

Git gpg默认使用,在大多数系统上都是GnuPG 1,不支持椭圆曲线加密.由于您的主键是椭圆曲线键,因此GnuPG 1根本无法使用该键.尝试将密钥与GnuPG(gpg --default-key key-id --sign)一起使用时,您将能够观察到相同的情况.

配置使用Git gpg2,至少需要GnuPG 2.1(你可以使用椭圆曲线键):

git config --global gpg.program gpg2
Run Code Online (Sandbox Code Playgroud)