0

我正在按照此处描述的步骤实施苹果的应用程序证明服务。但是,我卡在了第 5 步,验证了公钥的哈希值。

  1. 在 credCert 中创建公钥的 SHA256 哈希,并验证它是否与您的应用程序中的密钥标识符匹配。

所有其他步骤(1-4、6-9)均已成功完成,因此我认为我走在正确的轨道上,但这是证书/密钥表示的问题,导致哈希错误。

以下是我当前状态的描述:

  1. 我已经将二进制 credcert 转换为 pem 格式($cert0
  2. 我尝试以我能想到的所有方式构建哈希,没有一个与我的应用程序 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 步的描述到底是什么意思?
4

0 回答 0