想上架?有些憑證觀念你必須要知道

還記得當初完成第一支 App 那種想大聲歡呼的喜悅,真是令人難忘

但那股激動隨即被下一個遇到的困難所澆熄,App 實機測試及上架,光看到整頁設定就讓人感到不耐煩。

而且,Apple developer 網頁一直以來不斷再更新,前陣子找的網路教學和新版的 layout 又不一樣了,參考性大幅降低,如果是 step by step 的新手,往往會不知所措。

萬變不離其宗,如果能懂得憑證原理,在應付上架設定時就不會是一件難事,甚至遇到憑證過期問題都能輕鬆應對。

於是我花了一段時間去了解憑證,在此期間也得到意想不到的收穫,除了 iOS 諸如 APNS 的設定之外,像是 TLS/SSL,SFTP,Telnet、GitHub 和 BitBucket 的 SSH,也都在了解憑證原理後豁然開朗,算是一個 CP 相當高的學習。

什麼是憑證?

憑證就是加簽過的公開金鑰,透過第三方機構背書此憑證是由某網站所發行的。我們可以下載某網站憑證並打開檢視,就會發現一堆亂碼及數個不同公司的加簽訊息,而亂碼就是公開金鑰。

憑證的用途是什麼?

RSA 非對稱金鑰有兩大特性

私鑰加密 -> 公鑰解密 身分驗證、數位簽章

公鑰加密 -> 私鑰解密 機密性

而憑證就是藉由身分驗證這種特性來進行登入驗證,而在 Apple developer,就是用來識別你這台用來作為開發機的電腦。

公開金鑰為什麼需要加簽成為憑證?

因為全世界能解開我用這把私密金鑰加密的訊息只有和它成對的公開金鑰,如果能確定這把公開金鑰是我發行的,你就能用這把公開金鑰來驗證我的身分,所以公開金鑰需要有第三方公正機構加簽背書。

另外值得一提的是,相信大家都有看過這樣的網頁。

螢幕快照 2016-05-31 下午10.31.22

一般對憑證不了解的人都會點選繼續前往,這可能會發生什麼樣的問題呢?
假如說我駭進了某 DNS,把 tw.yahoo.com 的 IP 改成我的 host,如此一來就可以竊取你所有資料。

如果使用了憑證,因為我沒有 yahoo 的私密金鑰,所以用 yahoo 發行的憑證所做的加密我是解不開的,既然如此該怎麼辦呢?我就放一個假的憑證來博取信任,這時候加簽就有他的意義了

因為有機構背書 tw.yahoo.com 這個域名就是使用 yahoo 他所發行的這把公開金鑰,瀏覽器經過檢查後會呈現綠色可信任的 https。

如果是用我發行的假憑證,由於一個 domain 不可能有兩個憑證,不會有該憑證是屬於 tw.yahoo.com 的加簽訊息 如此一來瀏覽器就會呈現圖中紅色劃線的 https。這下應該就可以理解,為什麼瀏覽器會提示這些警告訊息了。

有了以上基本觀念,接下來的操作就會變得輕鬆

首先我們要做的就是,產生一對金鑰,打開 keychain,鑰匙圈存取->憑證輔助程式->從憑證授權要求憑證,其實這個翻譯翻的很不好,從字面上無法理解是什麼意思,如果看英文的話會清楚的多 Cetificate Authority request certificate,我翻譯為「向憑證中心申請憑證」。

螢幕快照 2016-05-31 下午4.13.10

再看看所產生檔案的副檔名為 certSigningRequest,意思就是「需要加簽的憑證」,簡稱 CSR 檔。

螢幕快照 2016-05-31 下午4.23.59

把公開金鑰上傳,經過 Apple developer 加簽後成為憑證。

螢幕快照 2016-05-31 下午4.26.31

下載並執行,同時觀察 keychain,就會發現公開金鑰變成憑證。

螢幕快照 2016-05-31 下午4.31.33

 螢幕快照 2016-05-31 下午4

如果是多人協作,而我這台電腦不是主要開發機該怎麼辦?

印象中一般開發者帳號只有兩台可以申請測試憑證,一台申請正式憑證,如果 coda 用光了怎麼辦,如果懂憑證原理的話解決方法其實很簡單-向開發機要它的私密金鑰。

官方網站匯出匯入 developerprofile 教學

不過我不喜歡這種方式,因為會把該開發者帳號底下的所有金鑰全部匯出來,但我並不想要全部都給別人。

不妨試試這個方法,選該今要點右鍵->輸出,用 p12 匯出匯入即可,反正也只是要私密金鑰嘛。其他檔案如憑證和佈署描述檔都可以在 Appler developer 下載。

螢幕快照 2016-05-31 下午4.44.42

安裝描述檔 Provision profile 

這個中文意思不太好翻,目前看來「安裝描述檔」最為貼切,因為它就是在安裝測試機或上架時所需要知道的安裝資訊,從設定頁面看下來不難發現,安裝資訊就是包含 憑證、App ID 和 註冊的裝置(測試用),完成這些設定後,將安裝描述擋下載執行,就可以進行 ipa 測試檔的發佈或上架囉。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *