什么是扩展名.p8的文件?(APNs身份验证密钥/ JWT)

Nik*_*Kov 4 certificate apple-push-notifications ios

我认为这有点荒谬,但是很难找到有关此文件的信息。我已经找到了很多有关如何获得此信息的信息Apple Push Notification Authentication Key,但我也想确切地知道它是什么。
这是我找到的一些信息:

优点:

  • 无需每年重新生成推送证书;
  • 一个身份验证密钥可用于所有应用程序;
  • 沙箱和生产相同。

Apple Docs

基于令牌的提供程序连接信任:使用基于HTTP / 2的API的提供程序可以使用JSON Web令牌(JWT)提供用于与APN连接的验证凭据。在此方案中,您设置了要由Apple保留的公共密钥以及由您保留和保护的私有密钥。然后,您的提供者使用您的私钥来生成和签名JWT提供者身份验证令牌。您的每个推送通知请求都必须包含提供者身份验证令牌。

您可以使用提供商之间的单个基于令牌的连接,APN可以将推送通知请求发送到捆绑ID在您的在线开发者帐户中列出的所有应用。

每个推送通知请求都会导致来自APN的HTTP / 2响应,并向您的提供程序返回成功或失败的详细信息。进一步检查基于令牌的提供商到APN的信任部分。

问题:

  • .p8文件实际上是什么?
  • 什么程序可以打开它?(钥匙串对我不起作用)
  • 有没有办法将其转换为.pem.p12
  • 为了不引起新的话题,提出了一个小问题:服务器端是否以.p8方式与.p12方式相同,还是应该添加其他工具?

bar*_*njs 5

文件扩展名只是一种约定,但.p8扩展名很可能用于指示它是 PKCS#8 PrivateKeyInfo(或 EncryptedPrivateKeyInfo)。

我希望钥匙串程序能够将其作为“钥匙”打开,但我手头没有 Mac,我不能说。它应该使用SecItemImport ( kSecFormatOpenSSL, )打开kSecItemTypePrivateKey

有没有办法将其转换为 .pem 或 .p12?

假设您的意思是“证书” .pem,则不是。如果您指的是 PEM 编码,当然可以。它是“BEGIN PRIVATE KEY”或“BEGIN ENCRYPTED PRIVATE KEY”,具体取决于。

从技术上讲,它还可以转换为 PKCS#12。但苹果的 PKCS#12 导入程序不会导入(我上次看到的)私钥,因为它无法弄清楚它们属于哪个证书(来自同一个 PKCS#12)。

这只是一个私钥,没有证书(因此不会过期)。因此基于证书的方法没有意义。

服务器端是否可以像 .p12 一样使用 .p8 进行操作,还是应该添加其他工具?

这完全取决于协议的细节,我不知道。如果协议传输证书,则转换涉及不同的机器。如果它只是传输签名并且服务器查找公钥进行验证,那么服务器端不会发生任何变化。


Hay*_*gan 5

这是一个文本文件!.p8 扩展名表示包含公钥/私钥的简单文本文件。您可以使用任何文本编辑器(TextEdit、vim、Sublime Text)打开它来查看您的密钥。


Lab*_*Ars 5

以下是我的研究状态:

该APNS .p8文件包含私钥用来注册为APNS消息JWT内容。该文件本身是纯文本文件,其内部的KEY格式为PEM格式。

----- BEGIN PRIVATE KEY -----和----- END PRIVATE KEY -----之间的部分是密钥本身的base64格式的ASN.1 PKCS#8表示形式。有些人可以使用以下Web服务来提取其内容(ASN1JS)。

KEY本身的长度为32个字节,用于为JWT创建所需的ECDSA P-256 SHA-256签名。生成的JWT看起来像这样的“ {JWT标头base64编码}。{JWT有效载荷base64编码}。签名(64字节)base64编码 ”。

有许多Web服务可对此类令牌进行解码,但由于无法识别相应的PUBLIC KEY(Apple在提供PRIVATE KEY时将其保密),因此某些服务无法检查签名。

编辑:似乎,公共密钥也包含在.p8文件中,它可以通过OpenSSL提取(在解码ASN.1内容:520位流时可见)。

openssl ec -in AuthKey_123ABC4567.p8 -pubout -out AuthKey_123ABC4567_Public.p8