Estrarre i certificati di firma del pacchetto di installazione dall'archivio xip

1

È possibile estrarre i certificati di firma del codice (CSC) da un file .app o firmato .dmg come ASN.1 (DER) con

codesign -d --extract-certificates prefix /path/to/file.dmg

Dopo puoi fare tutto con openssl , security ecc.

Il mio obiettivo è quello di fare lo stesso per gli archivi xip firmati , che utilizzano Certificati di firma del pacchetto di installazione (IPSC). È possibile verificare le firme xip con

pkgbuild --check-signature /path/to/archive.xip

Ma non sembra esserci un'opzione per esportare effettivamente i certificati nel modo in cui codesign può farlo con CSC.

C'è un modo per farlo dalla riga di comando?

L'obiettivo finale è quello di gestire gli archivi xip firmati con IPSC autofirmati / autoprodotti. Sarà uno script che prima controlla la firma con pkgbuild , quindi, se l'utente lo desidera, dovrebbe esportare i certificati e quindi aggiungerli al portachiavi come attendibile. So che puoi sempre dequarantine il file xip con il certificato autofirmato, e questa sarà un'opzione aggiuntiva, ma questa è sempre su base per-file, quindi deve esserci anche la possibilità di estrarre i certificati (root / leaf) e importarli in keychain come trusted (o trusted root). Come farò quest'ultimo non lo so ancora, ma la prima cosa è la prima.

Grazie per il tuo aiuto. (Questo è il mio primo post su AskDifferent.)

    
posta JayB 07.08.2016 - 15:50
fonte

1 risposta

1

Penso che funzioni con il seguente comando:

xar --dump-toc="${HOME}/Desktop/header.xml" -f /path/to/your/archive.xip

Questo scriverà un file xml chiamato "header" sul desktop, e quello contiene i certificati X509. Hai solo bisogno di analizzarlo; forse jq farà il lavoro al meglio.

Modifica: tuttavia, jq non è macOS nativo, quindi deve essere con xmllint ecc. Questo di seguito funziona. Metterà tutti i certificati nella tua cartella home.

FILEPATH="/path/to/your/archive.xip" FILENAME=$(/usr/bin/basename "$FILEPATH") /usr/bin/xar --dump-toc=- -f "$FILEPATH" \ | /usr/bin/xmllint --xpath '//signature[@style="RSA"]' - \ | /usr/bin/sed -n '/<X509Certificate>/,/<\/X509Certificate>/p' \ | xargs \ | /usr/bin/awk '{ \ gsub("<X509Certificate>","-----BEGINCERTIFICATE-----"); \ gsub("</X509Certificate>","-----ENDCERTIFICATE-----"); \ print}' \ | /usr/bin/awk '{gsub(" ","\n"); print}' \ | /usr/bin/awk '{ \ gsub("BEGINCERTIFICATE-----","BEGIN CERTIFICATE-----\n"); \ gsub("-----ENDCERTIFICATE","\n-----END CERTIFICATE"); \ print}' \ | /usr/bin/csplit -k -s -n 1 -f "$FILENAME"-cert - '/END CERTIFICATE/+1' '{3}' 2>/dev/null for CERT in *"-cert"* ; do if [[ $(/bin/cat "$CERT") == "" ]] ; then rm -rf "$CERT" else mv "$CERT" "$CERT.pem" fi done

    
risposta data 08.08.2016 - 01:02
fonte

Leggi altre domande sui tag