標籤:product cer 還需要 explicit load ssl rate down checkbox
這是一篇來自raywenderlich的教程,內容翔實!結構簡單透徹、講解循序漸進、文章品質上乘!是一篇難的的博文!使用半瓶的英語水平翻譯了一下:
1.【iOS push全方位解析】(一) push的概述
2.【iOS push全方位解析】(二) 產生push認證,產生Provisioning Profile(本篇)
3.【iOS push全方位解析】(三) 一個極簡的demo,並測試一下push
這裡查看原文
--------------------------------------------------------------------------------------------------------------------------------------------
Provisioning Profile和認證,Oh My! 為了App中push通知好用,App需要provisioning profile簽名。另外,App Server需要用SSL認證對push通知簽名。provisioning profile和SSL 憑證是緊密串連在一起的,並且僅對一個App ID可用,這麼做可以保證只有你的App Server可以發送push訊息到你的App而不是別人的App。
正如你所知,App使用不同的provisioning profile分別用於開發和發布。同樣,也有兩種push認證:
● Development 被開發人員provisioning profile簽名的app,App Server必須使用開發人員認證發送通知。
● Production 按照Ad Hoc或者APP Store發布的app,App Server必須使用production認證。如果兩者混淆,那麼App則收不到push通知。
本教程僅使用development 認證
產生Certificate Signing Request(CSR) 還記得你是如何為App真機聯調產生Development 認證嗎?如果記起來了,下面的步驟會很熟悉。但,我建議你還是嚴格按照步驟操作。大多數做push通知開發的時候,都遇到了認證問題。
數位憑證是基於公-私密金鑰的密碼學。你不必知道cryptography如何使用認證:,但是你有必要瞭解:認證總是跟私密金鑰一起工作的。認證只是“公-私密金鑰”的公開部分。發給其他人是安全的,然而,私密金鑰應該被保護好,它是一個秘密。私密金鑰不是別人的事兒,而是你自己的事!有一點很重要:沒有私密金鑰,不能使用認證。
無論什麼時候,請求一個數位憑證,需要提供一個Certificate Signing Request(簡寫CSR)。當產生CSR,一個新的私密金鑰被放到mac的鑰匙串中了。接著,你發送CSR到一個認證機構(這裡就是iOS developer protal),該機構將基於你提交的CSR產生SSL認證。
開啟mac中的“鑰匙串”,選擇菜單,“Request a Certificate from a Certificate Authority”
(圖)請求認證1
如果你沒有這個菜單選項或者顯示“Request a certificate from a certificate Authority with key”,你下載並安裝WWDR InterMediate Certificate ,並確保在鑰匙串視窗中沒有選中任何一個私密金鑰。
你應該看到:
(圖)請求認證2
輸入email地址。我聽說需要使用,用於App簽名的email相同。但是,好像其他什麼email都ok。
輸入“PushChat”作為名字,這兒可以輸入任何字元,找一個好記的,方便後面我們發現私密金鑰。選中【 Saved to disk】點擊“Continue”。將檔案儲存為“PushChat.certSigningRequest”。在“密鑰”這個欄中可以看到剛剛申請的private,右鍵,並選擇“Exprot”
(圖)匯出認證
儲存私密金鑰為PushChatKey.p12並輸入一個密碼。本教程中,我使用“pushchat”作為p12檔案的密碼,但是你應該選一個容易記的密碼。這個密鑰(p12)檔案需要保密。
產生App ID和SSL認證
登入iOS Dev Center選擇右側面板的“Certificate,Identifiers&Profile”。
(圖)iOS dev center
下面的介面出現了
(圖)Certificate,Identifiers&Profile大綱
既然我們搞iOS app,在iOS Apps中選擇“certificates”。現在你可以產生一個新的App ID。每一個push App需要唯一的ID,因為push通知是發送給指定的app
在左側點擊“App IDs”,點擊“+”按鈕
(圖)添加App id
輸入下面的資訊:
● App ID Description:PushChat
● App Services Check the push Notification Checkbox
● Explicit App ID
你最好使用自己的BundleIdentifier-com.yoursite.PushChat-而不是使用我的。你還需要在Xcode中設定相同的Bundle ID。輸入這些資訊後,點擊“Continue”。將詢問你是否確定這些資訊,如果一切無誤後點擊“Submit”
哈哈!你已經成功註冊了一個新的App ID
(圖)App ID產生了
接下來幾分鐘,你還會產生SSL認證,App Server將使用這個SSL認證跟APNS建立一個安全連線。這個認證跟App ID相連。APP Server只能發送push通知給這個App ID的程式,而不是其他App。
產生App ID後,它看在列表中這個位置:
(圖)App id的展示
在列表中點擊這個PushChat App id,一個相關的視窗出現了:
(圖)App id詳情
注意在“Push Notification”這一行,兩個橙色的原點,“Configurable”分別在Develop和Distribution欄。這表示你的App ID可以用於push,但是你還需要設定一下。點擊“setting”按鈕,配置一下:
(圖)App id config
向下滾動到“Push Notification”這一段,選擇Develop SSL Certificate這一行的“Create Certificate”按鈕。
(圖)產生認證
“Add iOS Certificate”嚮導出現了:
(圖)嚮導
第一件事,詢問你產生Certificate signing Request,這一步你已經做完了,點擊“continue”。下一步,你該上傳CSR檔案。選擇剛才產生的CSR,點擊“Generate”。
產生SSL 憑證這將花費幾秒鐘,當它進行完成,點擊“Continue”。
現在點擊“Download”來擷取認證,它自動被命名為“aps_development.cer”
(圖)下載認證
正如你看到的,你已經有一個可用的認證,現在開發可以用push了。如果有需要,你還可以下載這個認證。開發人員push認證三個月有效。
當你發布app,重複上面的操作。擷取一個production 認證。步驟是相似的。production認證的有效期間是一年,你需要確保在期限前。
沒必要添加這個certificate到鑰匙串,當然你可以雙擊aps_development.cer檔案,你會發現它跟私密金鑰關聯起來了。
製造PEM檔案到目前位置,你有三個檔案:
● CSR檔案
● PushChatKey.p12私密金鑰檔案
● SSL認證(aps_development.cer)
將這三個檔案儲存好。你可以把CSR扔了,但是我覺得存著更容易一些。當認證到期,你可以使用那個CSR來產生一個新的認證。如果你產生一個新的CSR,還要匯出一個新的私密金鑰(p12)(安裝認證後,在鑰匙串中郵件匯出為p12)。通過複用CSR你可以使用已有的私密金鑰,僅.cer檔案會變化。
你得將認證和私密金鑰轉成更容易使用的格式。因為,我們的app Server是用PHP寫的,所以你需要將認證和私密金鑰合成為PEM格式。PEM格式對PHP來說更容易使用。如果你的app Server使用其他語言寫的,下面這些步驟不使用了。
你將使用OpenSSL命令列來操作。開啟命令列執行下面的步驟,進入認證的下載檔案夾,我的是案頭:
$ cd ~/Desktop/
轉換cer為pem檔案
$ openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem
轉換p12為pem檔案
$ openssl pkcs12 -nocerts -out PushChatKey.pem -in PushChatKey.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
你第一次需要輸入p12的密碼,這樣opensll可以讀取它。接著你還為PEM需要輸入一個新的密碼。這兒我還使用“pushchat”,你可以使用更安全的密碼。
注意:如果你沒有輸入PEM密碼,openssl不會提示錯誤資訊,但是產生的pem檔案並沒有私密金鑰。
最後,合成認證和key為一個pem檔案
$ cat PushChatCert.pem PushChatKey.pem > ck.pem
至此,檢查一下認證是否正常。執行下面的命令:
$ telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.226...
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is ‘^]‘.
上面是一個普通,沒有加密的串連到APNS Server。看到以上的資訊,說明你的mac可以串連到APNS。Ctrl + C關閉串連。如果得到錯誤訊息,確保防火牆對2195是放開的。
我們再串連一次,這次使用SSL認證和私密金鑰建立安全連線
$ openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
Enter pass phrase for PushChatKey.pem
你應該看到一大堆輸出,這些是openssl想讓你知道後面在幹什麼。如果串連成功,你可以鍵入一些字元。輸入斷行符號,伺服器關閉了串連。如果建立串連的時候有問題,openssl會給出錯誤資訊,但是你得向上滾動尋找到並查看。
【注意】:有兩個APNS伺服器:沙箱伺服器用於測試,線上live用於生產模式。這裡,我們使用沙箱伺服器,因為我們的認證是development的,不是distribution的
-----------------------------------------------------------------------------------------------------------------------------
譯者加:
產生openssl認證和ck.pem的過程可以歸納為:
-----------------------------------------------------------------------------------------------------------------------------
製造provisioning profile
在iOS Dev Center 還沒有,點擊左側欄的Provisioning profiles按鈕,點擊“+”按鈕。
(+provisioning file)
Step1:選擇類型
選擇“iOS App development”選項按鈕,點擊continue
(provision develop)
Step2:配置
選擇PushChat app ID,可以保證provisioning profile準確的綁定了PushChat App
(選擇app id)
Step3:產生
選擇要包含的認證,這一步現在應該很常規。
(選擇認證)
Step4:選擇devices
選擇你想包含的裝置,
Step5:profile的名字
設定provisioning profile的名字為“PushChat Development”
(provisioning name)
你幾乎已經完成了,最後,點擊“Download”按鈕,下載最新產生的provisioning profile。
雙擊provisioning profile添加到Xcode或者拖拽到xcode中。
如果你是發布App,可重複相似的過程。產生一個Ad Hoc或者App Store發布的profile。
"iOS push全方位解析(二)【譯文】"——產生OpenSSL認證,Provisioning Profile