Extrahieren Sie Signaturzertifikate für Installationspakete aus dem xip-Archiv

Es ist möglich, Code Signing Certificates (CSCs) aus einer .app- oder signierten .dmg-Datei als ASN.1 (DER) zu extrahieren

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

Danach können Sie damit Dinge tun openssl, indem Sie securityusw. verwenden.

Mein Ziel ist es, dasselbe für signierte xip-Archive zu tun , die Installer Package Signing Certificates (IPSCs) verwenden. Sie können xip-Signaturen mit überprüfen

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

Es scheint jedoch keine Option zu geben, die Zertifikate tatsächlich so zu exportieren, wie es Codesign mit CSCs tun kann.

Gibt es eine Möglichkeit, dies über die Befehlszeile zu tun?

Das letztendliche Ziel ist es, mit xip-Archiven umzugehen, die mit selbstsignierten/selbst ausgestellten IPSCs signiert sind. Es wird ein Skript sein, das zuerst die Signatur mit überprüft pkgbuildund dann, wenn der Benutzer möchte, die Zertifikate exportiert und sie dann als vertrauenswürdig zum Schlüsselbund hinzufügt. Ich weiß, dass Sie die xip-Datei immer einfach mit dem selbstsignierten Zertifikat dequarantieren könnten, und dies wird eine zusätzliche Option sein, aber dies ist immer auf Dateibasis, also muss es auch die Möglichkeit geben, die Zertifikate (root /leaf) und importieren Sie sie als vertrauenswürdig (oder vertrauenswürdiger Stamm) in den Schlüsselbund. Wie ich letzteres mache, weiß ich noch nicht, aber das Wichtigste zuerst.

Ich danke Ihnen für Ihre Hilfe. (Dies ist mein erster Beitrag bei AskDifferent.)

Ich habe mich ein wenig umgesehen, und es gibt eine App namens RB App Checker Lite , die die Signaturinformationen aus einem xip-Archiv liest und auch die Zertifikate vollständig anzeigt. Es gibt also sicherlich eine Möglichkeit, dies zu tun, aber möglicherweise nicht über die Befehlszeile. (?)

Antworten (1)

Ich denke, es funktioniert mit dem folgenden Befehl:

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

Dadurch wird eine XML-Datei namens "Header" auf Ihren Desktop geschrieben, und diese enthält die X509-Zertifikate. Sie müssen es nur parsen; vielleicht jqwird die Arbeit am besten.

Bearbeiten: Es ist jedoch jqkein natives MacOS, also muss es mit xmllint usw. sein. Das unten funktioniert. Es legt alle Zertifikate in Ihrem Home-Ordner ab.

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