Предоставленный идентификатор passTypeIdentifier или teamIdentifier может не соответствовать вашему сертификату, или цепочка доверия сертификата не может быть проверена.

Я получаю сообщение об ошибке в заголовке каждый раз, когда пытаюсь установить упакованное вручную приложение сберегательной книжки, нажав кнопку «Добавить». Я могу успешно установить приложения сберегательной книжки, которые были упакованы с помощью инструмента «signpass», но теперь мне нужно создать динамические пакеты на сервере unix.

Я пытался вручную упаковать свое приложение сберегательной книжки с помощью различных пакетов из Интернета, и каждый из них дает мне одну и ту же ошибку. Вот несколько пакетов, которые я пробовал: https://github.com/maater/TCSH-PKPass https://github.com/devartis/passbook https://github.com/pcperini/PyPKPass

Это созданный и заархивированный файл pass.json (обратите внимание, что заполнены teamIdentifier и passTypeIdentifier):

{
  "formatVersion" : 1,
  "passTypeIdentifier" : "pass.votizen.membership",
  "serialNumber" : "ASDF",
  "webServiceURL" : "https://www.votizen.com/passbook/",
  "authenticationToken" : "AUTH_TOKEN",
  "teamIdentifier" : "MY_TEAM_IDENTIFIER",
  "organizationName" : "Matthew Snider",
  "description" : "Your voter registration card",
  "logoText" : "VOTIZEN",
  "labelColor": "#B7B0A8",
  "foregroundColor" : "#5F6062",
  "backgroundColor" : "#FCFAF5",
  "generic" : {
    "headerFields": [
      {
        "key" : "reg_date",
        "label": "VOTER SINCE",
        "value" : "2002"
      }
    ],
    "primaryFields" : [
      {
        "key" : "party",
        "label": "REGISTERED PARTY",
        "value" : "Democrat"
      }
    ],
    "secondaryFields" : [
      {
        "key" : "election",
        "label" : "NEXT ELECTION",
        "value" : "November 6, 2012"
      },
    ],
    "auxiliaryFields" : [
      {
        "key" : "polling_place",
        "label" : "POLLING PLACE",
        "value" : "268 E Julian Street, San Jose, CA 95112",
        "textAlignment" : "PKTextAlignmentLeft"
      }
    ],
    "backFields" : [
      {
        "key" : "elections",
        "label" : "ELECTIONS YOU VOTED IN",
        "value" : "2010 General\n2008 General\n2008 Primary\n2004 General"
      },
      {
        "key" : "polling",
        "label" : "DIRECTIONS TO YOUR POLLING PLACES",
        "value" : "https://maps.apple.com/maps?q=268+E+Julian+Street,+San+Jose,+CA+95112"
      },
      {
        "key" : "website",
        "label" : "Powered by Votizen",
        "value" : "https://www.votizen.com/"
      }
    ]
  }
}

Я выполнил шаги Apple, чтобы сгенерировать свой сертификат идентификатора типа пропуска, загрузить и установить его в свой доступ к цепочке ключей. Затем я экспортировал его как «Certificates.p12» и запустил следующее, чтобы сгенерировать certificate.pem и key.pem:

set P12 = Certificates.p12
sef PASSWORD = MY_PASSWORD
openssl pkcs12 -passin pass:$PASSWORD -in "$P12" -clcerts -nokeys -out certificate.pem 
openssl pkcs12 -passin pass:$PASSWORD -in "$P12" -nocerts -out key.pem -passout pass:$PASSWORD

После создания файла манифеста я запускаю:

openssl smime -passin pass:$PASSWORD -binary -sign -certfile wwdr.pem -signer certificate.pem -inkey key.pem -in manifest.json -out signature xs-outform DER

Я создал wwdr.pem, экспортировав Центр сертификации Apple Worldwide Developer Relations в виде файла Privacy Enhanced Mail.

Я где-то читал, что вам нужно установить корневой центр сертификации Apple (который у меня есть), поэтому вот список сертификатов, которые я установил:

  • Центр сертификации интеграции приложений Apple Корневой ЦС Apple
  • Корневой центр сертификации Apple Применяет отношения с разработчиками по всему миру
  • Центр сертификации
  • com.apple.idms.appleid.prd.4f3756614a59746e554a36344e6b55426b64576441413d3d
  • com.apple.вездесущность.peer-uuid.207240B0-758A-4C1E-B173-D1B70FF03533
  • com.apple.вездесущность.peer-uuid.C5D1968F-8923-48E4-A09D-8C9AE485A88B
  • com.apple.вездесущность.ssl-сертификат.C5D1968F-8923-48E4-A09D-8C9AE485A88B
  • Разработчик iPhone: Мэтью Снайдер ID типа пропуска:
  • пройти.votizen.членство

Очевидно, что-то не так с сертификатом, который я использую, или с тем, как я его упаковываю. Я понятия не имею, что я делаю неправильно. Я надеюсь, что у кого-то есть идея.


person matt snider    schedule 11.10.2012    source источник


Ответы (2)


Я понял. Я не понял при создании файла p12, что вам нужно выбрать как сертификат, так и закрытый ключ. Я предполагал, что экспорт сертификата также будет включать закрытый ключ, но это не так. Когда вы экспортируете идентификатор типа передачи в Keychain Access, убедитесь, что в нем указано «Экспортировать 2 элемента», а не «Экспортировать идентификатор типа передачи: ...».

person matt snider    schedule 11.10.2012
comment
Рад, что вы разобрались со своей проблемой! Кстати, PyPKPass требует только закрытый ключ для подписи, из которого он получает информацию о сертификате. - person Patrick Perini; 15.10.2012
comment
Я получаю следующую ошибку при выполнении try! PKPass.init(данные: объект как! Данные). Неверная ошибка чтения данных pass.airarabia.airarabia/62488078_003_SHJ_CGP_2388312279. Предоставленный идентификатор passTypeIdentifier или teamIdentifier может не соответствовать вашему сертификату, или цепочка доверия сертификата не может быть проверена. Фатальная ошибка: «попробуй!» выражение неожиданно вызвало ошибку: Error Domain=PKPassKitErrorDomain Code=1 Невозможно прочитать проход, поскольку он недействителен. Данные, полученные вызовом API, работают в Andriod. - person Muhammad Maqsood; 05.12.2019
comment
@MuhammadMaqsood, ты смог решить эту проблему? Я получаю ту же ошибку. - person Stephan Walters; 10.04.2020
comment
@Stephan, для меня проблема заключалась в истечении срока действия сертификата на стороне нашего сервера, который связывается с сервером Apple для генерации PKPASS. Я создал новый сертификат и заменил его просроченным, и он начинает работать. - person Muhammad Maqsood; 11.04.2020
comment
Мне не помогло - person Alexander Matveev; 15.05.2021

Я понимаю, что это древняя проблема, но недавно она снова возникла у меня. Проблема заключалась в том, что новый сертификат Apple WWDR несовместим с сертификатом пропуска, также созданным Apple.

Решение заключалось в использовании старого сертификата WWDR, ​​срок действия которого истекает в 2023 году, при подписании пропусков.

person pipacs    schedule 22.03.2021