Проверка сертификатов Apple App Attest

#php #openssl #x509certificate #sha256 #attestations

Вопрос:

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

  1. Создайте хэш SHA256 открытого ключа в credCert и убедитесь, что он соответствует идентификатору ключа из вашего приложения.

Все остальные шаги (1-4, 6-9) выполнены успешно, поэтому я думаю, что нахожусь на правильном пути, но скорее это проблема с представлением сертификата / ключа, приводящая к неправильному хэшу.

Вот описание моего текущего состояния:

  1. Я уже преобразовал двоичный credcert в формат pem ( $cert0 )
  2. Я попытался построить хэш на всех, о которых я мог подумать, но ни один из них не соответствовал моему идентификатору приложения:

а) через php с использованием отпечатка пальца openssl

 $credcertPK_hash = openssl_x509_fingerprint($cert0, 'sha256', true);
$credcertPK_hash = base64_encode($credcertPK_hash); 
 

б) прямое использование openssl:

 openssl x509 -in credcert.pem -pubkey -noout 
  | openssl pkey -pubin -outform der 
  | openssl dgst -sha256 -binary 
  | openssl enc -base64
 

c) хэширование строки открытого ключа (я получаю то же самое с phpseclib и openssl)

 // openssl
$pkstr = openssl_pkey_get_details(openssl_pkey_get_public($cert0))['key']

// phpseclib
$x509 = new X509();
$cert0_loaded = $x509->loadX509($cert0);
$pkstr = (string) $x509->getPublicKey();

// base64 encoded, binary sha256 hash of the public key string
base64_encode(hash('sha256', $pkstr, true))
 

Ни один из этих методов не дал мне совпадающего хэша, a, b и c, скорее, дают разные хэши. Поэтому я предполагаю, что моя проблема в том, что мне не хватает знаний о том, что именно я на самом деле должен хэшировать в первую очередь.

Итак, вопрос в том (любой ответ на один из следующих вопросов потенциально может помочь мне решить эту проблему):

  • Как вычислить хэш sha256 открытого ключа сертификата (если не одним из вышеперечисленных методов)?
  • Есть ли ошибка в приведенных выше методах?
  • Что именно имеет в виду applea, описывая шаг 5?