iOS簽名受權機制

iOS簽名受權機制

原文  http://Joywii.github.io/blog/2016/03/02/iosqian-ming-shou-quan-ji-zhi/html

幾個重要的概念ios

1. 非對稱加密git

非對稱加密算法須要兩個密鑰: 公開密鑰(publickey )和 私有密鑰(privatekey) 。公開密鑰與私有密鑰是一對,若是用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;若是用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。(私鑰是要保密的,公鑰能夠公開) RSA 是目前最有影響力的公鑰加密算法,它可以抵抗到目前爲止已知的絕大多數密碼攻擊,已被ISO推薦爲公鑰數據加密標準。 RSA 是以三個發明者的姓氏首字母組成的。 github

2. 摘要算法算法

數據摘要算法是密碼學算法中很是重要的一個分支,它經過對全部數據提取指紋信息以實現數據簽名、數據完整性校驗等功能,因爲其不可逆性,有時候會被用作敏感信息的加密。數據摘要算法也被稱爲哈希(Hash)算法、散列算法。 摘要算法也能夠理解爲將任意長度的數據,經過一個算法,獲得一個固定長度的數據。典型的摘要算法,好比大名鼎鼎的 MD5 和 SHA 。 安全

3. 數字簽名app

數字簽名就是利用 非對稱加密 和 摘要算法 來傳輸數據,保證數據的 完整性 和 合法性 。驗證過程以下: 1. 發送方使用給一個摘要算法( MD5 )獲得要發送數據的摘要,而後用本身的私鑰和一個非對稱加密算法( RSA )對獲得的摘要加密,獲得加密後的數據,而後將 要發送的數據 、 加密後的數據 、 摘要算法 和 加密算法 一同發送給接收方。 2. 接收方接收到數據後,根據指定的摘要算法( MD5 )獲得實際要傳輸的數據的摘要,而後在根據指定的加密算法( RSA )和已有的公鑰解密獲得加密數據解密後的數據,最後比較解密後的數據和獲得的摘要是否相同,若是相同就說明實際要傳輸的數據是完成的合法的。 ide

4. 數字證書ui

數字證書就是經過數字簽名方式來傳輸的一段數據,iOS開發中的數字證書是Apple Worldwide Developer Relations Certification Authority(WWDR)證書認證中心數字簽名過的數據,表面上咱們看到的就是鑰匙串中的證書,實際WWDR數字簽名後的證書包含如下內容:加密

  • 用戶的公鑰
  • 用戶信息
  • 證書機構名稱
  • 證書有效期
  • 蘋果數字簽名 : 用於驗證以上信息

iOS簽名驗證流程

整個過程的前提是已經購買了蘋果的開發者帳號(\$99或\$299)。而且安裝了 Xcode ,由於安裝 Xcode 的過程當中會自動安裝蘋果的開發者根證書( Apple Worldwide Developer Relations Certification Authority )。這證書包含了蘋果CA的 公鑰 。有了這個公鑰,咱們和Apple就能夠進行互信的信息傳遞。整個過程大體以下: 

一. 證書申請

  1. 用咱們本身的機器生成 CertificateSigningRequest.certSigningRequest 文件,在生成的過程當中會產生一對公鑰和私鑰,私鑰已經保存在咱們的機器上,這個文件包含了咱們的公鑰,具體內容以下: 

    • 申請者信息,此信息是用申請者的 私鑰 加密的。 
    • 申請者公鑰,此信息是申請者使用的 私鑰 對應的公鑰。 
    • 摘要算法和公鑰加密算法
  2. 上傳 CertificateSigningRequest.certSigningRequest 到 MemberCenter 。 MemberCenter 根據獲取到的 公鑰 和咱們的用戶信息,經過 Apple 本身的私鑰進行數字簽名生成證書,這個證書能夠經過安裝 Xcode過程當中安裝的根證書進行驗證。具體證書包含內容以下: 

    • 用戶的公鑰
    • 用戶信息
    • 證書機構名稱
    • 證書有效期
    • 蘋果數字簽名 : 經過根證書驗證以上信息
  3. 下載生成的證書,雙擊安裝就會出如今 鑰匙串 中, 鑰匙串 會根據證書中的公鑰對應上本機器上的私鑰。 

二. 打包簽名

  1. 在 MemberCenter 上生成 mobileprovision 下載安裝, mobileprovision 包含以下信息: 

    • appid: 每一個 app 在 MemberCenter 建立的對應的 id 。 
    • 包含哪些證書: 不一樣證書對應不一樣功能。 
    • 功能受權列表
    • 可安裝的設備列表: iOS設備的UDID列表,發佈證書應該是通配。 
    • 蘋果數字簽名: 蘋果用來驗證以上的信息。 
  2. 經過 Xcode 指定要使用的證書,實際上是 指定了簽名過程當中要使用的 私鑰 ,這個私鑰是和證書中的公鑰相對應的。而後指定對應的 mobileprovision ,因爲 mobileprovision 文件中包含了證書,實際上本地證書就是 Xcode 用來指定對應 私鑰 用的。 

  3. 最後經過指定的私鑰對須要簽名的數據進行數字簽名(編譯過程在簽名以前,這裏省略了編譯過程,編譯後的二進制文件也是要簽名的內容),最終將 ipa 包的形式輸出, ipa 的文件結構以下: 

  • 資源文件: 例如圖片、html、等等。 
  • _CodeSignature/CodeResources: plist文件,內容是包內全部數據的數字簽名。 
  • 可執行文件: 編譯後的二進制文件。 
  • mobileprovision: 咱們以前經過Xcode指定的包含了證書的文件。 
  • Frameworks: 程序引用的非系統自帶的Frameworks。每一個Framework的結構跟app其實差很少 

三. 驗證安裝

  1. 解壓 ipa 包,獲取 embedded.mobileprovision ,經過設備上的 Apple公鑰驗證該文件的完整性和安全性。 
  2. embedded.mobileprovision 文件驗證經過,獲取該文件內的用戶證書,再經過設備上的 Apple 公鑰驗證該證書的完整性和安全性。 
  3. 證書驗證經過後,獲取證書內的咱們開發者的公鑰。而後經過開發者的公鑰驗證應用程序包內的數據的完整性和安全性。經過後便可安裝。
相關文章
相關標籤/搜索