Extraer los certificados de firma del paquete del instalador del archivo xip

1

Es posible extraer Certificados de Firma de Código (CSC) de un .app o .dmg firmado como ASN.1 (DER) con

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

Después de eso, puedes hacer cosas con él usando openssl , security etc.

Mi objetivo es hacer lo mismo con los archivos xip firmados , que utilizan Certificados de firma de paquetes del instalador (IPSCs). Puedes verificar las firmas xip con

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

Pero no parece haber una opción para exportar los certificados de la forma en que lo hace codesign con CSC.

¿Hay alguna forma de hacerlo desde la línea de comandos?

El objetivo final es tratar con archivos xip firmados con IPSCs autofirmados / autoemitidos. Será un script que primero verifique la firma con pkgbuild , y luego, si el usuario lo desea, debería exportar los certificados y luego agregarlos al llavero como de confianza. Sé que siempre se puede poner en cuarentena el archivo xip con el certificado autofirmado, y esta será una opción adicional, pero esto siempre es por archivo, por lo que también tiene la capacidad de extraer los certificados (raíz). / hoja) e importarlos en llavero como de confianza (o raíz de confianza). Cómo haré lo último, no lo sé todavía, pero lo primero es lo primero.

Gracias por tu ayuda. (Esta es mi primera publicación en AskDifferent.)

    
pregunta JayB 07.08.2016 - 15:50

1 respuesta

1

Creo que funciona con el siguiente comando:

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

Esto escribirá un archivo xml llamado "encabezado" en su escritorio, y ese contiene los certificados X509. Solo necesitas analizarlo; quizás jq hará el mejor trabajo.

Editar: sin embargo, jq no es nativo macOS, por lo que tiene que estar con xmllint, etc. Esto funciona a continuación. Pondrá 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

    
respondido por el JayB 08.08.2016 - 01:02

Lea otras preguntas en las etiquetas