Perché dovrei firmare git commit / tag? Dovrei firmare sia commit che tag?

1

Domanda facile, ma nessuno lo ha chiesto qui per quanto vedo: Perché dovrei firmare git commit?

Per dare qualche altra cosa a cui rispondere c'è anche questa domanda: Perché dovrei firmare tag git (releases)?

E infine: Dovrei firmare entrambi? Perché, perché no? Che cosa è buono / cattivo se firmo solo commit / tag?

    
posta rugk 17.08.2016 - 21:19
fonte

1 risposta

1

Perché è utile?

Generalmente si tratta di modelli di thread. E ci sono diversi esempi in passato, dove avrebbe aiutato. Per esempio. gitea lo ha introdotto dopo che il suo account bot è stato compromesso .

È utile impedire la modifica del codice sorgente sul servizio / server di hosting Git (GitHub, GitLab, Gogs / Gitea ecc.) e alle connessioni ad essi.

Cosa firmare?

Ora per gli utenti del tuo software potrebbe essere utile ad es. scarica tag di rilascio firmati e verificali, in modo che possano essere sicuri di aver creato il codice sorgente e cose del genere.
Ricorda anche se i tag di rilascio della firma non aiutano nulla se si distribuiscono i file binari non firmati. Nella maggior parte dei casi gli utenti preferiscono i binari pronti e quindi non sarebbero in grado di verificarne l'autenticità.

Può anche essere utile per firmare git commit se gli utenti possono utilizzare regolarmente il ramo principale direttamente per scaricare / utilizzare il software. Possono ad es. sii più comune quando è solo un progetto PHP che puoi clonare e funziona fuori dagli schemi rispetto a quando devi compilarlo, dove molti utenti potrebbero usare binari compilati.

Tuttavia i commit di git firmati possono anche avere senso per gli sviluppatori, in quanto possono verificare che nulla di malizioso sia stato introdotto in un commit git (almeno non senza un committer / contributor che lo faccia deliberatamente o che firma qualcosa accidentalmente). In quanto tale, se c'è qualcosa di sbagliato in un commit, puoi essere sicuro che è stato lui a commetterlo a introdurlo. (come puoi altrimenti basta impostare il tuo nome utente git e la posta arbitrariamente) Tuttavia, questo è davvero utile solo se tutti i committer al ramo principale firmano i loro commit e quindi possono essere ingombranti.

Attenzione: tieni presente che quando si firma git commit devi farlo per ogni commit. Alcuni flussi di lavoro accettano di creare un ramo di funzionalità e quindi di firmare solo il commit di unione, ma questo deve adattarsi al flusso di lavoro. In ogni caso questo significa anche che spesso devi usare la tua chiave privata e averla (sbloccata) nel tuo ambiente di sviluppo. Questo potrebbe non essere l'ideale dal punto di vista della sicurezza. Al contrario, quando si rilascia una versione con un tag git firmato, probabilmente non lo si fa così spesso, quindi è possibile utilizzare un dispositivo / VM / sandbox / utente / ... separato, in cui non si dispone di un codice di sviluppo non affidabile in esecuzione , ma clonare / tirare il repository (con git pull --verify-signatures ovviamente se hai firmato i tuoi commit per assicurarti che nulla sia stato distrutto con esso) o trasferire l'intero repository git in qualche modo (in un modo "preservante l'integrità") puoi firmare il tag con una chiave di firma tenuta in un posto più sicuro. In questo modo la tua chiave di firma non rischia almeno di essere compromessa se la tua macchina di sviluppo dovesse venire compromessa.

Conclusione

La firma dei tag git è (IMHO) più utile della firma si impegna , poiché il primo è quello che gli utenti del tuo software utilizzeranno principalmente, mentre il secondo è per lo più buono per sviluppatori e ha i suoi rischi (come discusso sopra). Quindi ha senso anche utilizzare diversi tasti per la firma di git , uno per le tue versioni che sono conservate in un luogo / percorso più sicuro e uno che usi per firmare tutti i tuoi commit. È logico utilizzare una chiave di firma git personale per la firma dei commit e, soprattutto nei progetti più grandi, avere la chiave di rilascio / tag di firma separata e condivisa tra il responsabile del progetto / alcune persone fidate, che sono autorizzate a fare release. In questo modo anche gli utenti non devono avere 50 chiavi dei tuoi sviluppatori nel loro keystore, ma solo quello del tuo progetto. Soprattutto perché gli utenti probabilmente non riconosceranno tutti i tuoi sviluppatori e potrebbero non essere in grado di verificare se questo è un vero sviluppatore del tuo o di un utente malintenzionato.

Quindi, se puoi firmare tag git . Ti aiuta già molto a distribuire il tuo software in sicurezza ai tuoi utenti. La firma di git commit può anche essere utile, ma è probabile che non sia importante quanto la firma dei tag git .

    
risposta data 21.10.2018 - 14:50
fonte

Leggi altre domande sui tag