Каковы бинарные данные вокруг plist в файле профиля инициализации?
Структура файла .mobileprovision выглядит примерно так:
<!-- small binary data -->
<?xml version="1.0" encoding="UTF-8"?>
<!-- plist data -->
</plist>
<!-- large binary data -->
У меня есть несколько вопросов по этому поводу:
- Что это за двоичные данные?
- Полезно ли это?
- Как извлечь plist из файла .mobileprovision без поиска границ XML?
В частности, я рассмотрю этот вопрос как ответ (и награду +100 баунти вместе с ним), когда отвечают как Q1, так и Q3.
Ответы
Ответ 1
Наконец-то я получил ответ от ответа на другой вопрос на SO.
В основном файл .mobileprovision представляет собой CMS зашифрованный XML файл. Его можно декодировать с помощью security
в OS X:
security cms -D -i /path/to/profile.mobileprovision
Ответ 2
У меня нет ответа на ваш первоначальный вопрос, но я могу объяснить, как извлечь сертификат подписи из файла .mobileprovision:
- В области plist.mobileprovision есть ключ "DeveloperCertificates", значение которого представляет собой массив NSData.
- Каждый NSData - это .cer файл - сертификат подписи, который вы ищете.
У меня есть короткая оболочка script для извлечения темы сертификата подписи непосредственно из файла .mobileprovision здесь: https://gist.github.com/2147247 - script работает только с одним сертификатом в упомянутом выше массиве, который должен быть обычным делом.
Как вы можете видеть в script, у меня нет ответа на третий вопрос, я просто отсекаю первую строку и все после закрывающего тега.
Ответ 3
использовать
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
Ответ 4
Файл в основном является общедоступным ключом распространения + общедоступной цепочкой сертификатов Apple + разрешенными устройствами, которые могут быть установлены на - до тех пор, пока файл IPA также подписан.
Ваш ключ закодирован в запись plist. и двоичные данные после plist являются соответствующими государственными сертификатами: общедоступным сертификатом Apple Root (загружаемым из Apple и органом сертификации Apple iPhone ( можно загрузить через портал Apple).
[Обновлено на основе комментариев]
Реальная цель заключается в том, чтобы выработать сертификат "общее имя", используемое моим мобильным файлом обеспечения, чтобы приложение могло быть подписано.
Внутри файла обеспечения безопасности для транспорта тэг ApplicationIdentifierPrefix
содержит сертификат UserID. Этот номер можно использовать для поиска сертификата в инструменте keychain.
Итак, вручную, шаги будут следующими:
- Извлеките номер
ApplicationIdentifierPrefix
из файла .mobileprovision
- Откройте приложение keychain. Просмотрите каждый логин/сертификат, чтобы найти тот, который соответствует UserId
Чтобы автоматизировать процесс
- запустите команду fess unix для извлечения идентификатора
- запустите
security find-certificate -a >a.out
, затем grep для идентификатора. Затем найдите общее имя из той же записи.
Ответ 5
Файл .mobileprovision представляет собой DER, закодированный ASN.1,
Плист является одним из значений, сохраненных в этом сообщении ASN.1.