Ответ 1
Отвечая на мой собственный вопрос, я надеюсь, что это поможет кому-то другому.
Выключается, файл mobileprovision
представляет собой сообщение с цифровой подписью PKCS7. Он не подписан с сертификатом разработчика, но с Apple одним.
Однако данные, которые были подписаны, представляют собой XML-plist, который содержит открытый ключ сертификата, который вы используете для подписи своих двоичных файлов.
Итак, в основном, следующие шаги:
- Извлеките данные из файла PKCS7.
- Извлеките открытый ключ из файла p12.
- Сравните эти два и проверьте, совпадают ли они.
Мне удалось сделать это с Ruby, так как он предоставляет хорошие обертки для OpenSSL. Я оставил script в Github, если кто-то захочет использовать.
Соответствующие части кода выглядят следующим образом:
profile = File.read(@profile_file)
certificate = File.read(@certificate_file)
p7 = OpenSSL::PKCS7.new(profile)
cert = OpenSSL::PKCS12.new(certificate, @certificate_password)
store = OpenSSL::X509::Store.new
p7.verify([], store)
plist = REXML::Document.new(p7.data)
plist.elements.each('/plist/dict/key') do |ele|
if ele.text == "DeveloperCertificates"
keys = ele.next_element
key = keys.get_elements('//array/data')[0].text
profile_cert = "-----BEGIN CERTIFICATE-----" + key.gsub(/\t/, "") + "-----END CERTIFICATE-----\n"
@provisioning_cert = OpenSSL::X509::Certificate.new(profile_cert)
end
end
# Compare @provisioning_cert.to_s and cert.certificate.to_s