我认为这有点荒谬,但很难找到有关这个文件的信息。我已经找到了很多关于如何获得此Apple Push Notification Authentication Key
的信息,但我也想确切地知道它是什么。
以下是我发现的一些信息:
优点:
来自Apple Docs:
基于令牌的提供者连接信任:使用该提供者的提供者 基于HTTP / 2的API可以使用JSON Web令牌(JWT)来提供验证 与APN连接的凭据。在此方案中,您提供了一个 Apple保留的公钥以及您保留的私钥 并保护。然后,您的提供商使用您的私钥生成和 签署JWT提供程序身份验证令牌。你的每一个推动 通知请求必须包含提供者身份验证令牌。
您可以在提供商和。之间使用单个基于令牌的连接 APN可以向所有应用程序发送推送通知请求 捆绑包ID列在您的在线开发者帐户中。
每个推送通知请求都会产生HTTP / 2响应 APN,向您的提供商返回成功或失败的详细信息。 进一步检查基于令牌的Provider-to-APNs Trust 部分。
问题:
.pem
或.p12
?答案 0 :(得分:2)
文件扩展名只是一种惯例,但很可能.p8
扩展名用于表示它是PKCS#8 PrivateKeyInfo(或EncryptedPrivateKeyInfo)。
我希望Keychain程序能够将它作为“一把钥匙”打开,但我手边没有mac我不能说。它应该以SecItemImport(kSecFormatOpenSSL
,kSecItemTypePrivateKey
)打开。
有没有办法将其转换为.pem或.p12?
假设你的意思是.pem
的“证书”,没有。如果你的意思是PEM编码,当然。它取决于“BEGIN PRIVATE KEY”或“BEGIN ENCRYPTED PRIVATE KEY”。
从技术上讲,它也可以转换为PKCS#12。但Apple的PKCS#12导入器不会导入(最后我看到)私钥,它无法确定它们所属的证书(来自相同的PKCS#12)。
这只是一个私钥,没有证书(因此没有过期)。所以基于证书的方法没有意义。
服务器端是否可以像.p12一样使用.p8运行,还是应该添加其他工具?
这完全取决于协议的细节,我不知道。如果协议传输证书,那么转换涉及不同的机器。如果它只是传输签名而服务器查找公钥进行验证,则服务器端没有任何改变。
答案 1 :(得分:0)
这是一个文本文件! .p8扩展名表示包含公钥/私钥的简单文本文件。您可以使用任何文本编辑器(TextEdit,vim,Sublime Text)打开它以查看您的密钥。
答案 2 :(得分:0)
以下是我的研究状态:
APNS .p8文件包含私钥,该私钥用于 SIGN 用于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时将其保密),因此某些服务无法检查签名。
编辑:.PUBLIC KEY似乎也包含在.p8文件中,可以通过OpenSSL提取(在解码ASN.1内容:520位流时可见)。
openssl ec -in AuthKey_123ABC4567.p8 -pubout -out AuthKey_123ABC4567_Public.p8