又到了一年一度更新推播憑證的時候!因為先前僅有初次產出推播憑證經驗,但沒有更新推播憑證的經驗,以為會有多難,沒想到就跟初次一樣的步驟。🧐
發現舊有的憑證無法更新期限,那麼就如同第一次建立新的推播憑證吧!此次推播憑證更新:2020/10/05,期限:2021/11/04,有效期間為13個月。
登入Apple Developer 後台:https://developer.apple.com
Certificates, Identifiers & Profiles
Services可發現三種服務,目前可以直接產出Sandbox與Production推播憑證,過去分開產出的方式已被Apple棄用。這樣也好,不然每次都要產出兩次,有時候還會搞不清楚憑證是Sandbox還是Production。
選擇:Apple Push Notification service SSL (Sandbox & Production)
選擇:App ID
取得:Certificate Signing Request
開啟內建軟體「鑰匙圈存取」
點擊憑證輔助程式->從憑證授權要求憑證
填入使用者電子郵件地址,此可隨意填寫,並選擇儲存到磁碟。
產出檔案:CertificateSigningRequest.certSigningRequest
將此檔案上傳剛才步驟的開發者後台,將產出推播憑證:aps.cer。
個人資訊交換.p12
下載並打開aps.cer,便會安裝到「鑰匙圈存取」。打開軟體到我的憑證,可發現剛安裝的憑證。
在該憑證右鍵,輸出「Apple Push Services」。
選擇檔案格式「個人資訊交換.p12」。
產出cert.p12,此檔即可放到推播後台,例如第三方推播平台Onesignal。
不過有些推播後台需要不同的格式:隱私權強化郵件.pem。
隱私權強化郵件.pem
打開終端機,使用以下指令:
openssl pkcs12 -in cert.p12 -out push.pem -nodes -clcerts
即可產出push.pem。
驗證.p12
可直接上傳到Onesignal推播平台,若能推播到手機表示成功。
當然要先整合Onesignal套件到App中,讓Onesignal獲得手機Device Token。
驗證.pem
在終端機打指令:
openssl s_client -connect gateway.push.apple.com:2195 -cert push.pem -key push.pem
以上回應略⋯⋯
SSL handshake has read 4192 bytes and written 2355 bytes
—
New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : DES-CBC3-SHA
Session-ID:
Session-ID-ctx:
Master-Key: FD5ED0BA180A7E5161A850783DFA3EB31A0627737123C52635FEAF4517A25310045E8D234A51D0DE64DFA869BE30CF10
Start Time: 1601894773
Timeout : 7200 (sec)
Verify return code: 0 (ok)
—
跑完以上表示成功,可把push.pem給推播後台。
若是驗證沒通過,則會有如下回應:
unable to load client certificate private key file
4466151020:error:09FFF06C:PEM routines:CRYPTO_internal:no start line:/AppleInternal/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-47.140.1/libressl-2.8/crypto/pem/pem_lib.c:684:Expecting: ANY PRIVATE KEY
什麼原因?此時透過文字編輯器查看.pem檔,只有CERTIFICATE。
正確的.pem檔有CERTIFICATE和PRIVATE KEY。
推播後台遇到問題
[ApnsPHP_Exception] Unable to connect to ‘ssl://gateway.push.apple.com:2195’: (0)
雖然是寫無法連線,但也有可能是推播憑證有問題。
我習慣自己就能搞定所有步驟,而不用等待同事有空閒時,才幫我確認憑證正確與否。🤪
參考
- How to Generate a Push Certificate and Export It to a PEM File
- 建立iOS推播憑證
- [iOS] OneSignal 推播服務
- [圖解][iOS] 蘋果推播通知服務 (Apple Push Notification Service)
Comments on: "[iOS] 更新推播憑證 (Renew Push Certificate)" (1)
此刻公司推播臨時出問題⋯⋯🤪
讚讚