2010-10-05 4 views
13

Sto cercando di automatizzare il processo di creazione di app per iPhone con un certificato particolare. Quindi immagina se diversi utenti hanno caricato il loro certificato nel sistema ed è stato immediatamente disponibile per firmare il codice. Voglio farlo senza alcuna interazione. Inoltre non voglio ingombrare il sistema o accedere al portachiavi con certificati utente diversi. A tal fine ho:Come faccio ad aggiungere autorizzazioni al codice per firmare un'app dal nuovo portachiavi senza alcuna interazione umana

  • disattivato il requisito in XCODE per richiedere la firma del codice per una build.
  • sviluppato uno script Ruby per creare un'applicazione tramite lo strumento da riga di comando xcodebuild
  • creato uno script per creare automaticamente un nuovo portachiavi per un utente del mio sistema
  • scritto una sceneggiatura per codificare firmare un iphone app costruito.

Tutto funziona, ma ho bisogno di premere manualmente invio quando il programma codesign tenta di esercitare il permesso di segno. I miei portachiavi sono tutti sbloccati. Stranamente funziona se faccio il portachiavi al portachiavi di default, ma non è scalabile, cioè potrei avere solo un processo di build in corso in un dato momento.

Quando ho manualmente Clicca sempre permetto per quel processo, ottengo una voce nella mia discarica portachiavi che assomiglia a questo:

entry 1: 
    authorizations (6): decrypt derive export_clear export_wrapped mac sign 
    don't-require-password 
    description: privateKey 
    applications (2): 
     0: /usr/bin/codesign (OK) 

Così sto pensando che ho bisogno di usare il comando autorizzare in sicurezza pre-autorizzare il codesign per tali permessi. La pagina di sicurezza è piuttosto scadente. Non riesco a farlo funzionare utilizzando comandi come questo:

sicurezza -v autorizzazione -nuovo segno |/usr/bin/codesign [codice segno vars che punta ad app e un portachiavi specifico]

Qualcuno ha qualche idea?

risposta

4

Sul mio sistema, una volta che il portachiavi è sbloccato con

di sicurezza di sblocco-portachiavi

ho lasciato xcodebuild per fare entrambe le cose la costruzione e la firma del codice.

Se i keychanin sono sbloccati, non dovrebbe essere necessario per utilizzare la chiamata precedente.

Si potrebbe anche voler controllare il comando esegui-con-privilegi di sicurezza.

+1

sicurezza sblocco -p

+0

Ho sbloccato il portachiavi da sempre. Quello che ho scoperto è che se prima andavo in xcode e facevo una singola build, tutte le build successive sembrano funzionare bene anche su altri portachiavi. Così ora: 1. creare un nuovo portachiavi (ho più utenti quindi è troppo difficile gestire tutto in un portachiavi) 2. impostarlo come il portachiavi predefinito 3. sbloccarlo. 4. Costruire tramite la creazione di xcode con la firma del codice e il set di cert tramite un file xcconfig. Questa non è una grande soluzione b/c è un problema per impostare nuovi server. Esplorerò più execute-with-privs, ma trovo la documentazione del comando di sicurezza terribile. – cmos

11

Se si importa il certificato nel portachiavi con -A consentirà l'accesso a tutti i programmi che tentano di richiedere tale certificato. Questo non è molto sicuro ma funziona. Puoi anche usare -T per limitarlo a una particolare app. Cerca il parametro di importazione trovato nella sicurezza uomo.

+0

Questo ha funzionato alla grande, in particolare nella mia situazione in cui i certificati cambiano sempre per i diversi clienti. –

+0

Se potessi votarti 10 volte lo farei! Non avevo pensato di tornare alla fase di importazione quando il palcoscenico del codice design si è rotto ... Grazie! –

1

La copia dei certificati dal portachiavi di accesso al portachiavi di sistema funziona correttamente nel mio caso e, di conseguenza, non è necessario eseguire alcun comando di sblocco della riga di comando.

4

Vorrei aggiungere al pool di risposte qui, ma anche riaprire parte della domanda a cui non penso abbia avuto risposta.

I seguenti comando importa un'identità (cert + chiave privata) e specifica che dovrebbe "permettere sempre" l'accesso del segno di codice a esso (prevenzione avviso Accesso Portachiavi dal promuovere utente per un clic del pulsante):

`security import Targets/CurrentTarget/Certificate.p12 -k #{KEYCHAIN} -P "#{cert_pwd}" -T /usr/bin/codesign` 

Questo comando consente l'accesso a tutte le applicazioni, piuttosto che solo segno di codice:

security import Targets/CurrentTarget/Certificate.p12 -k #{KEYCHAIN} -P "#{cert_pwd}" -A

uno di questi comandi si prenderà cura di finestre di dialogo che compaiono ogni volta che si utilizza una chiave privata nella vostra Keych ain. TUTTAVIA, NON si prenderanno cura di un avviso simile che appare la prima volta che si richiede il permesso di utilizzare una chiave privata. Questo avviso apparirà al primo utilizzo e ti chiederà di scegliere di consentire, negare o consentire sempre. Ogni volta dopo (se usi le opzioni -T o -A sopra, supponendo che la chiave rimanga nel tuo portachiavi) non vedrai una finestra di dialogo.

La mia domanda è: come si può eliminare l'avviso che appare al primo utilizzo?

Ho preso in considerazione l'utilizzo di Apple Script per automatizzare toccando il pulsante Consenti sempre, ma poiché l'avviso viene attivato nel mezzo del comando xcodebuild, non sono sicuro che ciò funzionerebbe. Qualsiasi aiuto sarebbe molto apprezzato!

+1

Potrebbe aver trovato la risposta a questa domanda: http://scottkle.in/clicking-always-allow-via-applescript-for-cod –

+0

Il collegamento non funzionava. È stato spostato qui: http://www.scottkle.in/clicking-always-allow-via-applescript-for-codesign-authorization-and-certificate-acl – Sirio

+0

@AlfieHanssen il link non funziona, puoi postare soluzione qui per favore? –

1

Per quanto riguarda le finestre di dialogo che si aprono ogni volta che si utilizza una chiave privata nel portachiavi, questo script Apple si prenderà cura dell'avviso simile che si apre la prima volta che si richiede il permesso di utilizzare una chiave privata.

#!/usr/bin/osascript 
tell application "System Events" 
    tell window 1 of process "SecurityAgent" 
    click button "Always Allow" of group 1 
    end tell 
end tell 

codesign wants to use key

+0

Questo è piuttosto un longcut piuttosto che aggiungere la chiave privata con l'opzione che consente a codesign di usarlo. Sì, la chiave privata, non il certificato come implica la GUI. – Sojurn

2

solo per aggiungere a tutte le risposte di cui sopra: anche anche la chiave/certificato non è protetto da password, è necessario passare -P "" (password vuota) per security import.