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 security
usw. 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 pkgbuild
und 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 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 jq
wird die Arbeit am besten.
Bearbeiten: Es ist jedoch jq
kein 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
JayB