Что такое двоичные данные вокруг plist в файле профиля обеспечения? - PullRequest
19 голосов
/ 15 марта 2012

Структура файла .mobileprovision выглядит примерно так:

<!-- small binary data -->

<?xml version="1.0" encoding="UTF-8"?>
<!-- plist data -->
</plist>

<!-- large binary data -->

У меня есть несколько вопросов по этому поводу:

  1. Что это за двоичные данные?
  2. Это полезно?
  3. Как извлечь лист из файла .mobileprovision без поиска границ XML?

В частности, я буду рассматривать этот вопрос как ответ (иприсудить +100 к награде вместе с ней), когда на Q1 и Q3 выше ответили.

Ответы [ 5 ]

25 голосов
/ 11 июля 2012

Я наконец получил ответ от ответ на другой вопрос на SO.

Обычно файл .mobileprovision представляет собой XML-файл CMS . Это может быть декодировано, используя security на OS X:

security cms -D -i /path/to/profile.mobileprovision
7 голосов
/ 21 марта 2012

У меня нет ответа на ваш первоначальный вопрос, но я могу объяснить, как извлечь сертификат подписи из файла .mobileprovision:

  1. Часть plist .mobileprovision имеет ключ 'DeveloperCertificates', значением которого является массив NSData.
  2. Каждый NSData представляет собой файл .cer - сертификат подписи, который вы ищете.

У меня есть короткий сценарий оболочки для извлечения субъекта сертификата подписи прямо из файла .mobileprovision здесь: https://gist.github.com/2147247 - скрипт работает только с одним сертификатом в массиве, упомянутом ранее, который должен быть общим случай.

Как вы видите в сценарии, у меня нет ответа на ваш третий вопрос, я просто обрезаю первую строку и все после закрывающего тега.

2 голосов
/ 14 ноября 2017

Файл .mobileprovision представляет собой DER в кодировке ASN.1 ,

. Перечень является одним из значений, хранящихся в этом сообщении ASN.1.

2 голосов
/ 25 апреля 2017

используйте

security cms -D -i /path/to/profile.mobileprovision

, если вы получаете сообщение об ошибке security: SecPolicySetValue: One or more parameters passed to a function were not valid, просто передайте ошибку на /dev/null

security cms -D -i /path/to/profile.mobileprovision 2> /dev/null
1 голос
/ 15 марта 2012

Файл - это в основном открытый ключ распространения + открытая цепочка сертификатов Apple + разрешенные устройства, на которые можно установить - при условии, что файл IPA также подписан.

Ваш ключ закодирован в записи plist. и двоичные данные после plist являются связанными общедоступными сертификатами: общедоступный сертификат Apple Root (можно загрузить из Apple и центр сертификации Apple iPhone (можно загрузить через ваш портал Apple).

[Обновлено на основе комментариев]

Реальная цель состоит в том, чтобы разработать сертификат "общее имя", использованный в моем файле мобильного обеспечения, чтобы приложение могло быть повторно подписано.

Внутри файла обеспечения мобильной связи тег ApplicationIdentifierPrefix содержит сертификат UserID. Этот номер можно использовать для поиска сертификата в инструменте связки ключей.

Так что вручную, шаги будут:

  1. Извлечение номера ApplicationIdentifierPrefix из файла .mobileprovision
  2. Откройте приложение связки ключей. Просмотрите каждый логин / сертификат, чтобы найти тот, который соответствует UserId

Для автоматизации процесса

  1. запустить необычную команду unix для извлечения идентификатора
  2. запустите security find-certificate -a >a.out, затем введите grep для идентификации. Затем найдите общее имя из той же записи.
...