2 votos

Extraer el Paquete de instalación de los Certificados de Firma de xip archivo

Es posible extraer Certificados de Firma de Código (Csc) de la una .aplicación o firmado .dmg como ASN.1 (DER) con

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

Después de que usted puede hacer cosas con él usando openssl, security etc.

Mi objetivo es hacer lo mismo para firma de xip archivos, que utilizan el Paquete de instalación de los Certificados de Firma (IPSCs). Usted puede verificar el xip de las firmas con

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

Pero no parece ser una opción realmente exportar los certificados de la manera codiseñar puede hacer con el Csc.

Hay una manera de hacerlo desde la línea de comandos?

El objetivo final es tratar con xip los archivos que se han firmado con la auto-firmado/auto emitido IPSCs. Será un script que comprueba en primer lugar la firma con pkgbuild, y luego, si el usuario lo desea, se debe exportar los certificados y, a continuación, agregarlos a el llavero de la confianza. Sé que siempre se puede simplemente dequarantine el xip archivo con el certificado auto-firmado, y esta será una opción adicional, pero siempre sobre una base por archivo, por lo que también tiene la capacidad para extraer los certificados (de la root y de las hojas) y la importación en llavero de la confianza (o de root de confianza). Cómo voy a hacer el último aún no lo sé, pero lo primero es lo primero.

Gracias por su ayuda. (Este es mi primer post en AskDifferent.)

3voto

JayB Puntos 6

Creo que funciona con el siguiente comando:

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

Este va a escribir un archivo xml llamado "encabezado" en el escritorio, y que contiene los certificados X509. Sólo se necesita analizar, tal vez en jq hará el trabajo mejor.

Edit: sin embargo, jq no es nativo de macOS, así que tiene que ser con xmllint etc. Esta por debajo de las obras. Va a colocar todos los certificados en su carpeta de inicio.

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X