2016-01-13 48 views
5

我想用我的一個GPS(2)子鍵在Git中籤名提交/標記 也就是說,我剛剛創建的RSA4096簽名專用密鑰與長ID B0 ## ...使用OpenPGP子鍵簽名提交失敗

sec# ed25519/9F############## 2016-01-07 [expires: 2023-01-05] 
    Key fingerprint = FC08 HEX HEX HEX 
uid     [ultimate] MY NAME <[email protected] 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代理啓動和運行。

我的第一個猜測是,那個混帳不理解長鍵符號,並試圖從短期一個替代

> 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只能使用主密鑰進行簽名,但不理解使用子密鑰(或者如果我在某處搞砸了自己)?

+2

嘗試設置'gpg2'爲'GPG。 program'。由於您使用'gpg2'來運行GnuPG 2.0,所以'gpg'將是GnuPG 1,而不支持橢圓曲線。請注意,目前,絕大多數人將無法處理您的簽名,因爲您的主鍵是橢圓曲線鍵。 –

+0

耶!這就是訣竅! 我知道,EC25519不是非常符合標準(尚未) - 這是一個練習使用它,但可能不是短期的最佳決策;) – THX

回答

15

Git默認使用gpg,這是大多數系統上的GnuPG 1,不支持橢圓曲線密碼學。由於您的主鍵是橢圓曲線鍵,因此GnuPG 1根本無法使用該鍵。嘗試在GnuPG上使用該密鑰時(gpg --default-key key-id --sign),您將能夠觀察到相同情況。

配置Git的使用gpg2代替,這是需要至少2.1 GnuPG的(你有,你可以使用橢圓曲線鍵):

git config --global gpg.program gpg2 
+0

在git中解決了我的gpg錯誤。謝謝! – Suriyaa

+0

謝謝。使用gpg2也解決了我與RSA密鑰的問題。 git拒絕提交,因爲主密鑰不存在。 – berbt

+0

使用GnuPG 2.1或更新版本時,這會將私鑰移入公鑰匙環中。 GnuPG之前(1.4,2.0)不會在那裏找到它。 –