Ekstrak Sertifikat Penandatanganan Paket Pemasang dari arsip xip

1

Dimungkinkan untuk mengambil Kode Penandatanganan Sertifikat (CSC) dari .app atau menandatangani .dmg sebagai ASN.1 (DER) dengan

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

Setelah itu Anda dapat melakukan hal-hal dengan menggunakan openssl, security dll.

Tujuan saya adalah melakukan hal yang sama untuk ditandatangani arsip xip , yang menggunakan Sertifikat Penandatanganan Paket Pemasang (IPSC). Anda dapat memverifikasi tanda tangan xip dengan

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

Tetapi sepertinya tidak ada pilihan untuk benar-benar mengekspor sertifikat dengan cara codesign dapat melakukannya dengan CSC.

Apakah ada cara untuk melakukannya dari baris perintah?

Tujuan akhirnya adalah untuk berurusan dengan arsip xip yang ditandatangani dengan IPSC yang ditandatangani sendiri / diterbitkan sendiri. Ini akan menjadi skrip yang pertama kali memeriksa tanda tangan pkgbuild, dan kemudian, jika pengguna ingin, itu harus mengekspor sertifikat, dan kemudian menambahkannya ke gantungan kunci yang tepercaya. Saya tahu Anda selalu bisa saja mendeklarasikan file xip dengan sertifikat yang ditandatangani sendiri, dan ini akan menjadi opsi tambahan, tetapi ini selalu berdasarkan file, jadi harus ada kemampuan untuk mengekstrak sertifikat (root / leaf) dan impor ke gantungan kunci sebagai tepercaya (atau root tepercaya). Bagaimana saya akan melakukan yang terakhir saya belum tahu, tetapi hal pertama yang pertama.

Terima kasih untuk bantuannya. (Ini adalah posting pertama saya di AskDifferent.)

JayB
sumber
Saya melihat sekeliling sedikit, dan ada sebuah aplikasi bernama Lite Pemeriksa Aplikasi RB yang akan membaca informasi tanda tangan dari arsip xip, dan juga menampilkan sertifikat secara penuh. Jadi pasti ada cara untuk melakukannya, tapi mungkin tidak dari baris perintah. (?)
JayB

Jawaban:

1

Saya pikir ini bekerja dengan perintah berikut:

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

Ini akan menulis file xml yang disebut "header" ke desktop Anda, dan yang berisi sertifikat X509. Anda hanya perlu menguraikannya; mungkin jq akan melakukan pekerjaan terbaik.

Edit: namun, jq bukan macOS asli, jadi harus dengan xmllint dll. Ini di bawah ini berfungsi. Ini akan menempatkan semua sertifikat di folder rumah Anda.

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
sumber