[英]What is the file with .p8 extension? (APNs Auth Key / JWT)
我認為這有點荒謬,但很難找到有關這個文件的信息。 我已經找到了很多關於如何獲得Apple Push Notification Authentication Key
,但我也想知道究竟是什么。
以下是我發現的一些信息:
優點:
來自Apple Docs :
基於令牌的提供者連接信任:使用基於HTTP / 2的API的提供者可以使用JSON Web令牌(JWT)來提供與APN連接的驗證憑據。 在此方案中,您可以配置Apple保留的公鑰以及您保留和保護的私鑰。 然后,您的提供商使用您的私鑰生成並簽署JWT提供程序身份驗證令牌。 每個推送通知請求都必須包含提供程序身份驗證令牌。
您可以在提供商和APN之間使用單個基於令牌的連接,將推送通知請求發送到其在線開發者帳戶中列出其捆綁ID的所有應用。
每個推送通知請求都會產生來自APN的HTTP / 2響應,並向您的提供商返回成功或失敗的詳細信息。 進一步檢查基於令牌的Provider-to-APNs Trust部分。
問題:
.pem
或.p12
? 以下是我的研究狀況:
該APNS .p8文件包含用於簽署 JWT內容APNS消息的私鑰 。 文件本身是純文本文件,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 header base64 encoded}。{JWT payload base64 encoded} .Signature(64 bytes)base64 encoded '。
有許多Web服務可以解碼這些令牌,但有些無法檢查簽名,因為相應的PUBLIC KEY未知(Apple在提供私鑰時會保密)。
編輯:似乎PUBLIC KEY也包含在.p8文件中,它可以通過OpenSSL提取(並且在解碼ASN.1內容時可見:520位流)。
openssl ec -in AuthKey_123ABC4567.p8 -pubout -out AuthKey_123ABC4567_Public.p8
文件擴展名只是一種約定,但很可能.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運行,還是應該添加其他工具?
這完全取決於協議的細節,我不知道。 如果協議傳輸證書,那么轉換涉及不同的機器。 如果它只是傳輸了一個簽名而服務器查找了公鑰進行驗證,那么服務器端就沒有任何改變。
這是一個文本文件! .p8擴展名表示包含公鑰/私鑰的簡單文本文件。 您可以使用任何文本編輯器(TextEdit,vim,Sublime Text)打開它以查看您的密鑰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.