2016-01-13 24 views
5

Vorrei utilizzare una delle mie sottochiavi GPS (2) per la firma di commit/tag in Git Ie, la mia chiave di sola firma RSA4096 appena creata con l'ID lungo B0 ## ...Impossibile eseguire la firma con la sottochiave 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] 

Dove sto lavorando su un portachiavi con la chiave master rimosso (backuped di distanza) come 'migliore politica chiave'

Così, ho cercato di impostare la chiave di firma per Git

[user] 
    ... 
    signingkey = B0############## 

Tuttavia, commettendo & firma fallisce con

> 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 

Quando un gpg-agent installato e funzionante.

La mia prima risposta è stata, che Git non capisce la notazione chiave lungo e ha cercato quello corto invece

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

> ~/.gitconfig 
[user] 
    ... 
    signingkey = DB###### 

Ma che ha anche fallito

> 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 

Quindi, mi chiedo cosa si rompe qui e se forse Git funzionasse solo con una chiave master per la firma ma non comprendesse l'uso delle sottochiavi (o se mi sono rovinato da qualche parte)?

+2

provare a impostare 'gpg2' come' gpg. program'. Dato che usi 'gpg2' per eseguire GnuPG 2.0,' gpg' sarà GnuPG 1 senza alcun supporto per le curve ellittiche. Tieni presente che attualmente, la stragrande maggioranza non sarà in grado di gestire le tue firme, poiché la tua chiave primaria è una chiave ellittica. –

+0

Yeay! Questo ha fatto il trucco! Sono consapevole che EC25519 non è molto conforme (ancora) - era un po 'un esercizio usarlo ma forse non era la migliore decisione a breve termine;) – THX

risposta

15

Git utilizza gpg per impostazione predefinita, ovvero GnuPG 1 sulla maggior parte dei sistemi e non supporta la crittografia a curve ellittiche. Siccome la tua chiave primaria è una chiave ellittica, GnuPG 1 non può usare affatto la chiave. Sarai in grado di osservare lo stesso quando provi ad usare la chiave con GnuPG (gpg --default-key key-id --sign).

Configurare Git per utilizzare gpg2 invece, che è necessario per essere almeno GnuPG 2.1 (che si ha, come è possibile utilizzare le curve ellittiche chiave):

git config --global gpg.program gpg2 
+0

Risolto il mio errore gpg in git. Grazie! – Suriyaa

+0

Grazie. L'uso di gpg2 ha risolto anche il mio problema con le chiavi RSA. git si rifiutava di eseguire il commit perché la chiave privata principale non era presente. – berbt

+0

Questo è un problema quando si utilizza GnuPG 2.1 o versione successiva, che spostava le chiavi private nel portachiavi pubblico. GnuPG precedente (1.4, 2.0) non lo troverà lì. –