#php #openssl #x509certificate #sha256 #attestations
Вопрос:
Я внедряю службу сертификации приложений Apple, следуя инструкциям, описанным здесь. Однако я застрял на шаге 5, проверяя хэш открытого ключа.
- Создайте хэш SHA256 открытого ключа в credCert и убедитесь, что он соответствует идентификатору ключа из вашего приложения.
Все остальные шаги (1-4, 6-9) выполнены успешно, поэтому я думаю, что нахожусь на правильном пути, но скорее это проблема с представлением сертификата / ключа, приводящая к неправильному хэшу.
Вот описание моего текущего состояния:
- Я уже преобразовал двоичный credcert в формат pem (
$cert0
) - Я попытался построить хэш на всех, о которых я мог подумать, но ни один из них не соответствовал моему идентификатору приложения:
а) через 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?