http://www.reibang.com/p/e759c864c2b8
P12證書直接生成
剛開始說需要pem證書時(shí)蔬浙,我查到有好些說可以直接轉(zhuǎn)化凯旋。在終端進(jìn)入p12所在的文件夾型酥,再用命令:
openssl pkcs12 -in 你的推送.p12 -out apns_production.pem -nodes
提示輸入密碼,輸入p12的密碼即可
注意:尾部的參數(shù),如果只導(dǎo)出私鑰可以加上 -nocerts 參數(shù),只導(dǎo)出證書則可以加上 -nokeys 參數(shù)
我沒條件抬頭驗(yàn)證,我將pem給服務(wù)器后臺(tái)戒祠,結(jié)果運(yùn)行失敗。因?yàn)槲抑篮笈_(tái)推送服務(wù)器存在著秘鑰解析的問題速种。但是既然都可以驗(yàn)證pem證書姜盈,那么這樣直接生成的pem也是正確的
證書和秘鑰分開生成
如圖把鑰匙串中的推送證書找開,分別把證書配阵,秘鑰分別導(dǎo)出成生pem馏颂,最后合成
具體的生成流程:
1.先分別導(dǎo)出證書apns-dev-cert.p12和秘鑰apns-dev-key.p12
2.把證書轉(zhuǎn)成pem
openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12
3.把秘鑰轉(zhuǎn)成pem
openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12
這里需要輸入三次密碼
4.合成pem
cat apns-dev-cert.pem apns-dev-key.pem > apns.pem
詳細(xì)參考 (證書的驗(yàn)證可以直接驗(yàn)證最后的合成證書)
5.注意
(1) 在第3點(diǎn)生成秘鑰pem時(shí)總共是輸了三次密碼,第一次密碼是key.p12的密碼棋傍,第二次和第三次重復(fù)的密碼是轉(zhuǎn)成pem后必須需要的解析密碼救拉,兩者密碼是不一樣的。但是是為了記憶瘫拣,直接就輸入同樣的密碼亿絮。
(2)在PHP的后臺(tái)服務(wù)中,如果開發(fā)人員寫得比較細(xì)麸拄,把證書pem和秘鑰pem分開來進(jìn)行的話派昧,那你可以不用走第5步,直接把證書pem和秘鑰pem給PHP開發(fā)人員就行了拢切。
(3)如果后臺(tái)服務(wù)器在使用時(shí)報(bào)錯(cuò):failed to parse PKCSI private key蒂萎。那說明我們第3步的這個(gè)密碼錯(cuò)誤。但是再想想淮椰,你生成這個(gè)pem,不可能不記清你的這個(gè)密碼吧五慈。所以了很大可能是后臺(tái)解析時(shí)密碼的輸入代碼有誤。
很可憐的事就是我就遇到了無法檢查原代碼的情況主穗。那怎么辦了泻拦,我們的思維告訴我們,實(shí)在不行公鑰pem不使用密碼就多好的黔牵。可是我直接測(cè)試了一下爷肝,那里是公鑰pem必須要密碼猾浦,不然在進(jìn)行搶著驗(yàn)證時(shí)是通不過的陆错。請(qǐng)看第6條,補(bǔ)充方法
6.補(bǔ)充方法
我們可以給秘鑰apns-dev-key.pem設(shè)置為無密碼金赦,將第3步生成的apns-dev-key.pem轉(zhuǎn)成未加密的apns-dev-key-unencrypted.pem
openssl rsa -in apns-dev-key.pem -out apns-dev-key-unencrypted.pem
那么第4步合成的時(shí)候就用這個(gè)未加密的apns-dev-key-unencrypted.pem來合成
cat apns-dev-cert.pem apns-dev-key-unencrypted.pem > apns-dev.pem
我最后就是用這個(gè)方法解決了failed to parse PKCSI private key的問題音瓷。
驗(yàn)證證書
apns的推送服務(wù)器地址
開發(fā)環(huán)境:gateway.sandbox.push.apple.com:2195 生產(chǎn)環(huán)境:gateway.push.apple.com:2195
但是我驚奇的發(fā)現(xiàn),不管是對(duì)于生產(chǎn)pem,還是測(cè)試pem,這兩個(gè)網(wǎng)址都可以進(jìn)行驗(yàn)證
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns.pem
openssl s_client -connect gateway.push.apple.com:2195 -cert apns-dev.pem
結(jié)果
x509 生成服務(wù)器所需證書pem或P12
基本流程:
1.利用“鑰匙串”請(qǐng)求證書
2.創(chuàng)建證書夹抗,下載cer文件
3.雙擊安裝下載的cer文件后绳慎,導(dǎo)出p12證書
4.利用命令行轉(zhuǎn)換pem文件
5.如果需要轉(zhuǎn)換為p12
6.驗(yàn)證證書是否可用
具體步驟:
1.利用鑰匙串請(qǐng)求證書
Apple建議這樣填寫
保存,得到"CertificateSigningRequest.certSigningRequest"文件漠烧。這是請(qǐng)求所有證書的基礎(chǔ)杏愤。
2.創(chuàng)建證書,下載cer文件
進(jìn)入蘋果開發(fā)者中心:https://developer.apple.com/cn/ Certificates, IDs & Profiles
創(chuàng)建 “iOS Development” 和 “iOS Distribution” 以及“Identifiers->App IDs”證書后已脓,才可以創(chuàng)建推送證書珊楼。
創(chuàng)建方法類似,此處省略800字度液。
把做的證書下載下來厕宗。
分別得到發(fā)布開發(fā)cer和發(fā)布cer
"aps_development.cer" 和 "aps.cer"
3.雙擊安裝下載的cer文件后,導(dǎo)出p12證書
分別導(dǎo)出開發(fā)證書和發(fā)布證書
"Apple Development IOS Push Services- com.in.inlan.p12" 和 "Apple Push Services- com.in.inlan.p12"
4.利用命令行轉(zhuǎn)換pem文件
1). 先把下載下的cer轉(zhuǎn)換為pem
$ openssl x509 -inform der -in aps_development.cer -out devPushChatCert.pem
$ openssl x509 -inform der -in aps.cer -out PushChatCert.pem
2). 將鑰匙串中的p12轉(zhuǎn)換成pem
$ openssl pkcs12 -nocerts -out devPushChatKey.pem -in Apple\ Development\ IOS\ Push\ Services-\ com.in.inlan.p12
$ openssl pkcs12 -nocerts -out PushChatKey.pem -in Apple\ Push\ Services-\ com.in.inlan.p12
3). 將上面生成的2中pem轉(zhuǎn)為一個(gè)pem
$ cat devPushChatCert.pem devPushChatKey.pem > dev_ck.pem
$ cat PushChatCert.pem PushChatKey.pem > ck.pem
5.如果需要轉(zhuǎn)換為p12
$ openssl pkcs12 -export -in dev_ck.pem -out dev_pushcer.p12
$ openssl pkcs12 -export -in ck.pem -out pushcer.p12
6.驗(yàn)證證書是否可用
整理有個(gè)寫好的腳本可用(內(nèi)部替換所需deviceToken即可)
Push Demo
https://iodefog.github.io/file/push.zip
$ php ios-push.php