首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 推送憑證:從 aps_development.cer 與 push.p12 產生 PEM 檔案指令全紀錄

     編輯:程式設計綜合問答

前置條件

  • 已在 Apple Developer 門網下載 `aps_development.cer`(開發環境)或 `aps_production.cer`(生產環境)。
  • 已在鑰匙圈 將憑證匯出為 `push.p12`(含私鑰),設定匯出密碼(如 `123456`)。
  • 終端機當前目錄為存放上述檔案的資料夾(如 `~/Desktop/push`)。

四步指令產生 `apns-dev.pem`

# 1. 將 .cer 轉為 .pem (僅公開金鑰)
openssl x509 -in aps_development.cer -inform der -out aps_development.pem

# 2. 將 .p12 轉為 .pem (含私鑰),需輸入匯出密碼與新 PEM 密碼
openssl pkcs12 -nocerts -in push.p12 -out push_key.pem
# 輸入匯入密碼 (Import Password): 123456
# 輸入 PEM 密碼 (PEM pass phrase): 123456
# 確認 PEM 密碼: 123456

# 3. 移除私鑰 PEM 密碼(伺服器端通常需無密碼金鑰)
openssl rsa -in push_key.pem -out push_key_nopass.pem
# 輸入 PEM 密碼: 123456

# 4. 合併公開金鑰與無密碼私鑰為最終 apns-dev.pem
cat aps_development.pem push_key_nopass.pem > apns-dev.pem

驗證 PEM 可用性

# 測試連線 Apple Push Gateway (開發環境)
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev.pem
# 若顯示 "Verify return code: 0 (ok)" 並進入互動模式,表示憑證正確

生產環境對應檔案名

環境CER 檔P12 檔最終 PEM
Developmentaps_development.cerpush.p12apns-dev.pem
Productionaps_production.cerpush_prod.p12apns-prod.pem

常見錯誤與解決

自動化腳本(可直接複製執行)

#!/bin/bash
set -e
CER="aps_development.cer"
P12="push.p12"
PASS="123456"   # 修改為你的 p12 匯出密碼

openssl x509 -in "$CER" -inform der -out cert.pem
openssl pkcs12 -nocerts -in "$P12" -out key_with_pass.pem -passin pass:"$PASS" -passout pass:"$PASS"
openssl rsa -in key_with_pass.pem -out key.pem -passin pass:"$PASS"
cat cert.pem key.pem > apns-dev.pem
echo "✅ apns-dev.pem generated"

總結

四條 OpenSSL 指令:`cer→pem`、`p12→pem(含私鑰)`、`移除私鑰密碼`、`合併`。產出的 `apns-dev.pem` 即為推送伺服器所需憑證檔,記得區分開發/生產環境對應的 Gateway 域名。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤訊息原因解決
`command not found`未安裝 OpenSSL 或未加入 PATHmacOS 內建 OpenSSL,確認終端路徑;Windows 用 Git Bash 或安裝 OpenSSL
`unable to load certificates`.cer 非 DER 格式鑰匙圈匯出時選「Certificate (.cer)」,非 .p12
`Mac verify error`P12 密碼錯誤重新輸入正確匯出密碼
伺服器報 `Invalid token`使用開發憑證連生產 gateway 或反之確認 `gateway.sandbox.push.apple.com` (開發) vs `gateway.push.apple.com` (生產)