wwdr.cer не найден, пропуск Apple Wallet

Вопрос или проблема

Я хочу создать карту членства в Apple Wallet. Я добавил “добавить в кошелек” на сайт, основанный на next.js, и сгенерировал generalPass.js. Который является

generalPass.js

import fs from "fs";
import path from "path";
import {PKPass} from "passkit-generator";

const generatePass = async (userData) => {
  try {
    // プロジェクトのルートディレクトリを基準にパスを解決
    const basePath = path.resolve(process.cwd(), "src/utils/certificates");
    const certificates = {
      signerCert: fs.readFileSync(path.join(basePath, "signerCert.pem")),
      signerKey: fs.readFileSync(path.join(basePath, "signerKey.pem")),
      wwdr: fs.readFileSync(path.join(basePath, "wwdr.pem")),
      signerKeyPassphrase: "PASSKEY",
    };

    const pass = new PKPass(
      {
        model: path.join(process.cwd(), "src/utils/pass-model"), // Pass モデルのパス
        certificates,
      },
      {
        serialNumber: "123456",
        description: "Member Card",
      }
    );

    pass.addPrimaryField("memberName", "名前", userData.name);
    pass.addSecondaryField("expiryDate", "有効期限", userData.expiryDate);

    return pass.getAsStream();
  } catch (error) {
    console.error("🔥 Error generating pass:", error);
    throw error;
  }
};

export default generatePass;

Однако он выдает

🔥 Error generating wallet pass: TypeError: ValidationError happened. Invalid certificate(s) loaded. "wwdr" is required. Please provide valid WWDR certificates and developer signer certificate and key (with passphrase).
Refer to docs to obtain them
    at generatePass (src/utils/generatePass.js:16:17)
    at GET (src/app/api/wallet-pass/route.js:11:42)
  14 |     };
  15 |
> 16 |     const pass = new PKPass(
     |                 ^
  17 |       {
  18 |         model: path.join(process.cwd(), "src/utils/pass-model"), // Pass モデルのパス
  19 |         certificates,
 GET /api/wallet-pass 500 in 281ms
 GET /favicon.ico 200 in 19ms
^[[1;2B^[[1;2B^[[1;2B

Путь к файлу wwdr.pem определенно правильный.
Я не уверен, что делать…

Кстати, я скачал файл wwdr G4 с сайта Apple и преобразовал из .cer в .pem с помощью команды “openssl x509 -inform der -in wwdrG4.cer -out wwdr.pem”

Ответ или решение

Конечно, для создания членской карты в Apple Wallet необходимо корректно настроить необходимость наличия World Wide Developer Relations (WWDR) сертификата. В данном случае, ошибка "ValidationError happened. Invalid certificate(s) loaded. ‘wwdr’ is required." указывает на то, что загруженный файл, представляющий сертификат WWDR, либо отсутствует, либо он точно не в том формате, который требуется для успешной генерации пасса.

Теория:

Сертификаты WWDR (WorldWide Developer Relations) являются ключевыми для разработчиков, так как удостоверяют доверие к продуктам, создаваемым и подписываемым в приложениях Apple. Сертификат WWDR действует как посредник между сертификатом разработчика и корневым сертификатом, обеспечивая целостность и подлинность пассов, добавляемых в Apple Wallet.

Когда дело доходит до Passbook/Apple Wallet, необходимые компоненты включают:

  1. Сертификат разработчика Apple: Это личный сертификат, используемый для создания и подписания ваших цифровых пропусков (Pass).
  2. Сертификат WWDR: Это промежуточный сертификат, который позволяет идентифицировать сертификат разработчика как доверенный.
  3. Закрытый ключ: Это ключ, связанный с вашим сертификатом разработчика Apple, и используется для подписания вашего пасса.

Без корректного импорта и преобразования этих сертификатов ваш проект может вызвать ошибки во время работы с компонентом PKPass.

Пример:

Предположим, что у нас есть следующий файл JavaScript, как то представлено выше, который использует библиотеку passkit-generator для создания и подписания цифрового пасса. Ошибка выше указывает на конкретные строки кода, где произошел сбой из-за некорректности подгруженного файла wwdr.pem.

Наиболее распространенная ошибка, с которой сталкиваются разработчики, заключается в неправильном форматировании сертификата. При преобразовании файла формата .cer в .pem, необходимо убедиться, что используете правильные команды OpenSSL и что сам файл сертификата корректен и полон.

Приложение:

Для решения этой проблемы, важно внимательно рассмотреть следующие шаги:

  1. Проверка Корректности Преобразования: Убедитесь, что OpenSSL правильно преобразовал файл формата .cer в .pem. Команда, использованная вами, выглядит корректно, но проверьте, действительно ли результат сохранил все необходимые компоненты и что сам сертификат полный и не обрезанный.

    openssl x509 -inform der -in wwdrG4.cer -out wwdr.pem
  2. Соединение WWDR Сертификата с Доверенной Корневой Цепочкой: Убедитесь, что ваш сертификат соответствует последней версии WWDR, доступной с сайта Apple. Кроме того, установите его в доверенные файлы вашего ключевого хранилища операционной системы.

  3. Проверка Правильности Пути: Перепроверьте, правильно ли указан путь к сертификату в структуре проекта. Опечатки или неправильное указание пути могут вызывать подобные ошибки.

  4. Загрузка Правильных Файлов: Подтвердите, что signerCert.pem и signerKey.pem тоже корректно сформированы и загружены. Все сертификаты должны поддерживаться и быть правильно интегрированы.

  5. Отметка Активации Dev Account: Убедитесь, что ваша учетная запись разработчика активна и актуальна на тот момент, когда вы пытаетесь создать и подписать pass.

Проверив все вышеперечисленные моменты и убедившись в их соответствии, вы должны увидеть разрешение текущей проблемы. В случае, если проблема сохраняется, рекомендуем обратиться за дополнительной поддержкой к документации Apple или сообществу разработчиков, где можно получить советы из первых рук.

Эти аспекты важны для понимания и решения проблемы с сертификатами, необходимыми для генерации членской карты в Apple Wallet. Работая в тандеме с новым запрашиваемым контекстом, это должно помочь избежать подобных ошибок в будущем и гарантировать успешную интеграцию.

Оцените материал
Добавить комментарий

Капча загружается...