Devo firmare il codice open source da solo?


11

Uso macOS 10.14 e ho riscontrato un problema quando ho provato a installare un plug-in open source per Vim che ho trovato su Github. Ho scaricato il codice sorgente e l'ho compilato da solo, il che ha funzionato bene, ma quando lo ho eseguito, l'esecuzione è stata interrotta perché la "firma del codice [dell'eseguibile] non è valida per l'uso nel processo".

Questo mi ha fatto un sacco di domande che non riesco a mettere in testa:

Potrei firmarlo da solo, ma quel tipo di rovina lo scopo della firma del codice? C'è qualche differenza qualitativa nella firma del codice da Internet e nel consentire le app di sviluppatori non identificati nella finestra di dialogo "Questa app è stata scaricata da Internet"?

Se non lo faccio, di chi è la "responsabilità" firmare? Il manutentore del repository? I collaboratori? Apple si aspetta che gli sviluppatori open source abbiano sempre un ID sviluppatore Apple? O ho frainteso lo scopo della firma del codice?

Modificare:

Per chiarire, la mia domanda è come dovrei gestire il codice sorgente non firmato che compilo da solo, poiché non mi aspetto che i contributori siano sempre in grado, o ricordo di, di firmare il loro codice, soprattutto quando si tratta di piccoli contributi a progetti open source con molti collaboratori.

Risposte:


9

Firma del codice ad hoc

Per le applicazioni e i binari di terze parti compilati dall'utente e che richiedono la firma del codice, utilizzare una firma del codice ad hoc .

  • Presumo che l'applicazione non funzionerà senza una firma;
  • Presumo che l'applicazione non verrà distribuita;
  • Suppongo che non ti interessi che l'identità della firma sia valida.

Una firma ad hoc non offre vantaggi di sicurezza affidabili. Può essere utilizzato per determinare se l'applicazione è stata modificata e può essere utilizzata per applicare restrizioni di sicurezza, come diritti, a un'applicazione.

Una firma ad hoc verrà convalidata contro codesignma non spctl. Questo può o meno avere importanza a seconda del file binario che viene firmato. Per applicazioni ed eseguibili, è improbabile che ciò abbia importanza perché spctlnon viene eseguito su file binari creati localmente.

Perché firmare il codice?

Per quanto riguarda la raffinata domanda:

Come dovrei gestire il codice sorgente senza segno che compilo da solo, dal momento che non mi aspetto che i contributori siano sempre in grado, o ricordo, di firmare il loro codice, specialmente quando si tratta di piccoli contributi a progetti open source con molti collaboratori.

Per la maggior parte delle applicazioni autocompilate, non è necessario firmare il codice. Ciò presuppone che ti fidi del codice dell'applicazione. Su macOS, puoi aprire applicazioni non attendibili dal Finder, vedi Apri un'app di Apple da uno sviluppatore non identificato .

Se non ti fidi del codice o degli sviluppatori, non compilare o eseguire l'applicazione.

La tua responsabilità

Il fornitore del codice sorgente non ha alcuna responsabilità o obbligo di fornire binari firmati con codice predefinito. Essendo compilato da solo, tutta la firma del codice è una tua scelta e responsabilità.

  • Apple richiede che gli invii agli App Store siano firmati in codice.

  • Apple richiede agli sviluppatori esterni agli App Store di firmare il proprio codice, ma non è ancora necessario.

In entrambi i casi, vengono firmati solo i file binari finali. Il codice sorgente e le risorse originali non sono firmati.

Il codice sorgente non è firmato

Il codice sorgente stesso non può essere firmato in modo significativo per macOS. I file sorgente e il codice possono essere firmati digitalmente, come qualsiasi altro file può essere, ma ciò non ha alcun impatto sul modo in cui l'applicazione o il binario risultanti vengono trattati da macOS.

Come codificare il codice ad hoc per un'applicazione Mac

Per contrassegnare un'applicazione su macOS con una firma ad hoc, impostare il -sflag di identità su -:

codesign --force -s - </path/to/application>

Tutte le altre regole, requisiti e permutazioni del codesigncomando rimangono invariate.

Il flag --forceviene utilizzato qui per sovrascrivere qualsiasi firma esistente.

Potrebbe essere necessario aggiungere il --deepflag al codesigncomando per firmare risorse secondarie come framework e servizi incorporati.


Perché consigli firme ad hoc? La risposta che hai collegato agli stati "In pratica, la creazione di binari firmati ad hoc ha un valore pratico solo per gli sviluppatori Apple".
Wowfunhappy,

Non ha alcun senso per me. L'aggiunta di una firma ad hoc significa che la convalida della firma fallirà. Questo non ti porta da nessuna parte: il programma fallirà con lo stesso identico messaggio di errore.
jksoegaard,

Sì, vedo che hai rimosso il link alla mia risposta al momento dell'iscrizione ad hoc e aggiunto i presupposti. Ma queste ipotesi valgono affatto? - Sembra che tu stia rispondendo come se la domanda riguardasse l'esecuzione di un'applicazione. Non è. Si tratta di avere un'applicazione già firmata a cui l'OP vuole aggiungere un plugin. Vale a dire che il plugin deve passare la convalida della libreria con l'applicazione firmata originariamente (Vim) come master.
jksoegaard,

La domanda originale è stata modificata. È piuttosto ampio come è. L'interrogante può commentare, chiarire e provare queste risposte per vedere cosa funziona per loro. Questa risposta tenta di rispondere alla domanda modificata e fornisce un approccio pratico. Se non aiuta, o ha ipotesi errate, l'interrogante può sperare di intervenire e chiarire il proprio intento.
Graham Miln,

1
Questa risposta è stata utile. La mia domanda era piuttosto generica perché trovavo i documenti Apple un po 'difficili da capire. L'uso della firma ad hoc ha risolto il problema specifico che avevo.
Syntaxén,

5

Firmare il programma da soli non sta rovinando lo scopo della firma del codice. Lo scopo generale della firma del codice è quello di consentire di verificare che il programma sia una copia non modificata che è stata originariamente creata da un'entità specifica (persona o società). Quando firmi un programma da solo per l'esecuzione sul tuo computer, consenti al sistema di verificare che sei stato tu a creare il binario e che non è stato modificato da altri.

La differenza qualitativa tra la firma del file binario dell'applicazione e il solo consentire app da sviluppatori non identificati in GateKeeper è che nel primo caso si consente l'esecuzione di un'unica app specifica, mentre il secondo si apre per la possibilità di poter aprire molte diverse app semplicemente facendo clic con il tasto destro su di esse e scegliendo Apri. Cioè è più restrittivo e quindi un po 'più "sicuro" firmando tu stesso il programma specifico.

La responsabilità della firma è interamente tua. Lo sviluppatore open source non può firmare il codice sorgente: è possibile firmare solo i file binari compilati. Mentre produci tu stesso i file binari compilati, spetta a te firmarli.

Puoi creare un account sviluppatore sul sito Web di Apple che ti consentirà di creare un certificato che può essere utilizzato per la firma. Se sei uno sviluppatore e compila regolarmente binari da eseguire su Mac, questo è il modo preferito di fare le cose. Se questa è una cosa una tantum che probabilmente non farai mai più, è probabilmente eccessivo passare attraverso questo processo. YMMV.

Altre risposte alla tua domanda qui ti consiglia di usare la firma ad hoc per il tuo binario. Non funzionerà. Sarà necessario generare una firma valida per far funzionare il binario con GateKeeper sulla sua impostazione più sicura.


1

Devo firmare il codice open source da solo?

Se non sei lo sviluppatore, allora no.

La firma del codice, in breve, è un metodo per dire che tu (lo sviluppatore) sei chi dici di essere e il codice non è cambiato dall'ultima volta che lo hai firmato.

C'è qualche differenza qualitativa nella firma del codice da Internet e nel consentire le app di sviluppatori non identificati nella finestra di dialogo "Questa app è stata scaricata da Internet"?

Sembra la tua confusa firma del codice (ciò che è richiesto dagli sviluppatori per pubblicare app sull'App Store) e Gatekeeper (ciò che protegge il tuo Mac dall'installazione di software da sviluppatori non identificati).

Se permetti al tuo Mac di installare software sia dall'App Store che da sviluppatori identificati, otterrai comunque il popup che ti avvisa del fatto che il software verrà installato

E se proviene da uno sviluppatore non identificato, otterrai lo stesso popup con una "icona di avviso"

È ancora possibile installare il software. Questo è solo un meccanismo che obbliga l'interazione dell'utente a installare effettivamente il software fornendo un livello di sicurezza contro malware autoinstallato.


Grazie, questo risponde ad alcune ma non a tutte le domande. Ho modificato la mia domanda per cercare di essere più specifico in quello che sto chiedendo
Syntaxén,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.