我认为这是一个有点荒谬,但它很难找到有关什么是这个文件的信息。我已经找到了很多信息如何得到这个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
? - 一个小的流出问题,为了不创建一个新的主题:服务器端是否以与.p12相同的方式操作.p8,或者应该添加额外的工具?
4条答案
按热度按时间cclgggtu1#
以下是我的研究状况:
APNS .p8文件包含PRIVATE KEY,用于SIGNAPNS消息的JWT内容。该文件本身是一个纯文本文件,里面的KEY格式为PEM格式。
KEY本身是32字节长,用于为JWT创建所需的ECDSA P-256 SHA-256签名。生成的JWT看起来像"*{JWT header base64 encoded}.{JWT payload base64 encoded}.Signature(64 bytes)base64 encoded“。
有很多Web服务可以解码这种令牌,但有些无法检查签名,因为相应的公钥是未知的(Apple在提供私钥时将其保密)。
编辑:似乎,PUBLIC KEY也包含在.p8文件中,它可以通过OpenSSL提取(并且在解码ASN.1内容时可见:520比特流)。
openssl ec -in AuthKey_123ABC4567_Public.p8-pubout -out AuthKey_123ABC4567_Public.p8
6tdlim6h2#
文件扩展名只是一种约定,但最有可能的是
.p8
扩展名用于指示它是PKCS#8 PrivateKeyInfo(或EncryptedPrivateKeyInfo)。我希望钥匙串程序能够打开它作为“一把钥匙”,但没有一个mac在手,我不能说。它应该以SecItemImport(
kSecFormatOpenSSL
,kSecItemTypePrivateKey
)打开。有没有办法把它转换成.pem或.p12?
假设你的意思是
.pem
的“证书”,没有。如果你是说PEM编码的话,当然。它是“开始PRIVATE KEY”或“BEGIN ENCRYPTED PRIVATE KEY”,取决于。从技术上讲,它也可以转换为PKCS#12。但是苹果的PKCS#12导入程序不会导入(我上次看到的)私钥,因为它无法弄清楚它们属于哪个证书(来自同一个PKCS#12)。
这只是一个私钥,没有证书(因此没有过期)。因此,基于证书的方法没有意义。
服务器端是否可以像.p12一样操作.p8,或者应该添加额外的工具?
这完全取决于协议的细节,我不知道。如果协议传输证书,则不同的机器参与转换。如果它只是传输一个签名,服务器查找公钥进行验证,那么服务器端没有任何变化。
nnvyjq4y3#
是个文本文件!.p8扩展名表示包含公钥/私钥的简单文本文件。您可以使用任何文本编辑器(TextEdit,Vim,Sublime Text)打开它以查看您的密钥。
hs1ihplo4#
这是一个私钥,很可能是PEM格式。文件类型扩展名在IANA application/pkcs8中描述。
扩展名在RFC 5958中定义:
.p8文件有时是PEM编码的。当.p8文件是PEM编码时
他们使用.pem文件扩展名。PEM编码是Base64
编码来自[RFC 4648]的第4节,DER编码的
EncryptedPrivateKeyInfo夹在:
或Base64编码,参见[RFC 4648]的第4节,DER-
编码的PrivateKeyInfo夹在中间:
您可以使用Keystore Explorer打开它。