我正在按照此处描述的步骤实施苹果的应用程序证明服务。但是,我卡在了第 5 步,验证了公钥的哈希值。
- 在 credCert 中创建公钥的 SHA256 哈希,并验证它是否与您的应用程序中的密钥标识符匹配。
所有其他步骤(1-4、6-9)均已成功完成,因此我认为我走在正确的轨道上,但这是证书/密钥表示的问题,导致哈希错误。
以下是我当前状态的描述:
- 我已经将二进制 credcert 转换为 pem 格式(
$cert0
) - 我尝试以我能想到的所有方式构建哈希,没有一个与我的应用程序 ID 匹配:
a) 通过 php 使用 openssl 指纹
$credcertPK_hash = openssl_x509_fingerprint($cert0, 'sha256', true);
$credcertPK_hash = base64_encode($credcertPK_hash);
b)直接使用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 步的描述到底是什么意思?