iOS認證相關概念詳解

來源:互聯網
上載者:User

標籤:certificate   app_id   provisioning_profile   app_group   codesigning   

        關於開發認證配置(Certificates&Identifiers&Provisioning Profiles),相信做iOS開發的同學沒少被折騰,本文將對相關概念做個系統的梳理。

        在進行iOS認證申請之前,假設你使用過Apple裝置且註冊過Apple ID。首先,必須加入蘋果開發人員計劃(Enrollin iOS Developer Program to become a member),分為Individual和Company/Organization兩種類型。

        下文主要基於個人開發人員帳號(Individual):$99/Year。

.認證( Certificates)

顧名思義,認證是用來證明內容(App的CodeSign)的合法性和完整性的。對於發布到AppStore/安裝到真機的應用程式(App),只有經過簽名驗證(CodeSign)才能確保來源可信,並且保證代碼是完整、未經篡改的。

認證分為兩類:Development和Production(Distribution)。

  • Development認證用來開發和調試應用程式;
  • Production主要用來分發應用程式(根據認證種類有不同作用)。

下文主要針對開發調試階段的Development認證。

.App ID( bundle identifier)

App ID用於標識一個或者一組App,AppID應該是和Xcode中的Bundle Identifier是一致的或者匹配的。

App ID字串通常是反網域名稱(reverse-domain-name)格式的CompanyIdentifier(Company ID)作為首碼(Prefix/Seed)。

App ID分為兩類:

  • Explicit App ID:唯一的App ID,這種App ID用於唯一標識一個應用程式。例如“com.apple.garageband”這個App ID,用於標識Bundle Identifier為“com.apple.garageband”的程式。
  • Wildcard App ID:萬用字元App ID,用於標識一組應用程式。例如“*”表示所有應用程式;而“com.apple.*”可以表示以“com.apple.”開頭的所有應用程式。

.裝置( Device)

Device就是運行iOS系統用於開發調試iOS App的裝置,每台裝置使用UDID來唯一標識。iOS裝置串連Mac後,可通過iTunes->Summary或者Xcode->Window->Devices擷取iPhone的UDID(identifier)。

Devices中包含了該賬戶中所有可用於開發與測試的裝置,普通個人開發帳號每年最多隻能註冊100個裝置。

  • Apps signed by you or your team run only on designated development devices.
  • Apps run only on the test devices you specify.

.供應設定檔(Provisioning Profiles

Provisioning Profile檔案包含了上述的所有內容:認證、App ID、裝置。它決定Xcode用哪個認證(公開金鑰)/私密金鑰組合(KeyPair)來簽署應用程式(Signing Product),將在應用程式打包時嵌入到.ipa包裡。安裝應用程式時,Provisioning Profile檔案被拷貝到iOS裝置中,運行該iOS App的裝置也通過它來認證安裝的程式。

如果要打包或者在真機上運行一個APP,一般要經曆以下三步:

  • 首先,需要認證來進行簽名,用於標識這個APP是合法、安全、完整的;
  • 其次,需要指明它的App ID,並且驗證Bundle ID是否與其一致;
  • 然後,如果是真機調試,需要確認這台裝置是否授權運行該APP。

Provisioning Profile把這些資訊全部打包在一起,方便我們在調試和發布程式打包時使用。這樣,只要在不同的情況下選擇不同的ProvisioningProfile檔案就可以了。

Provisioning Profile也分為Development和Distribution兩類,有效期間同Certificate一樣。

.開發組供應設定檔(Team Provisioning Profiles

Xcode3.2.3預發布版本中加入了Team ProvisioningProfile這項新功能。

在Xcode中添加Apple Developer Account時,它將與Apple Dev Center後台勾兌自動產生iOSTeamProvisioning Profile(Managed by Xcode)。

Team Provisioning Profile包含一個為Xcode iOS Wildcard App ID(*)產生的iOS Team Provisioning Profile:*(匹配所有應用程式),賬戶裡所有的Development Certificates和Devices都可以使用它在這個eam註冊的所有裝置上調試所有的應用程式(不管bundleidentifier是什麼)。同時,它還會為開發人員自己建立的Wildcard/Explicit App IDs建立對應的iOSTeam Provisioning Profile。

Team Provisioning Profile產生/更新時機:

  • (1).Add an Apple ID account to Xcode
  • (2).Fix issue "No Provisioning Profiles with a valid signingidentity" in Xcode
  • (3).Assign Your App to a Team in Xcode project settings ofGeneral|Identity
  • (4).Register new device on the apple development website or Xcodedetected new device connected

利用Xcode產生和管理的iOS Team Provisioning Profile來進行開發非常方便,可以不需要上網站手動產生下載Provisioning Profile。

.App Group

WWDC14除了發布了OS X v10.10和switf外,iOS 8.0也開始變得更加開放了。說到開放,當然要數應用擴充(AppExtension)了。顧名思義,應用擴充允許開發人員擴充應用的自訂功能和內容,能夠讓使用者在使用其他應用程式時使用該項功能,從而實現各個應用程式間的功能和資源共用。可以將擴充理解為一個輕量級(nimbleand lightweight)的分身。

擴充和其Containing App各自擁有自己的沙箱,雖然擴充以外掛程式形式內嵌在ContainingApp中,但是它們是獨立的二進位包,不可以互訪彼此的沙箱。為了實現Containing App與擴充的資料共用,蘋果在iOS 8中引入了一個新的概念——App Group,它主要用於同一Group下的APP實現資料共用,具體來說是通過以App Group ID標識的共用資源區——App Group Container。

置於同一App Group下的一組AppIDs必須是唯一的(Explicit),並且ContainingApp與Extension的App ID命名必須符合規範。一般Extension的App ID以Containing App為Seed,假如Garageband這個App(App ID=“com.apple.garageband”),則支援從語音備忘錄匯入到Garageband應用的外掛程式的AppID可能形如“com.apple.garageband.extImportRecording”。

.認證與簽名( Certificate& Signature)

通過Keychain認證助理手動申請開發認證時(也可通過Xcode自動請求產生),keychain將產生一個包含開發人員身份資訊的CSR(Certificate Signing Request)檔案,Keychain Access|Keys中將新增一對Public/Private Key Pair

在Apple開發網站上傳該CSR檔案,Apple憑證授權單位WWDRCA(Apple Worldwide Developer Relations Certification Authority)將使用WWDR private key對CSR中的publick key進行加密簽名產生數位憑證(ios_development.cer)。

下載認證到Mac上雙擊安裝後,在KeychainAccess|Keys中展開CSR產生Key Pair中的私密金鑰前面的箭頭,可以查看到包含其對應公開金鑰的認證(Your requested certificate will bethe public half of the key pair.);在KeychainAccess|Certificates中展開安裝的認證(ios_development.cer)前面的箭頭,可以看到其對應的私密金鑰。

每個認證(其實是公開金鑰)對應的私密金鑰會被用來對內容(executable code,resources such as images and nib files aren’t signed)進行數字簽名(CodeSign)——使用雜湊演算法產生內容摘要(digest)。上面已經提到,公開金鑰被包含在數位憑證裡,數位憑證又被包含在描述檔案(ProvisioningFile)中,描述檔案在應用被安裝的時候會被拷貝到iOS裝置中。

另一方面,iOS系統以及MacOS X系統(在安裝Xcode時)將自動安裝AppleWWDRCA.cer這個Intermediate Certificates。如果Mac Keychain Access認證助理在申請認證時尚未安裝過該認證,請先下載安裝。iOS/Mac機上的ios_development.cer可以被AppleWWDRCA.cer中的 public key解密,從而擷取每個開發認證中可信任的公開金鑰。

iOS/Mac裝置(系統)使用AppProvisioning Profile認證中的公開金鑰來判斷App程式碼簽署的合法性:

  • (1)若用公開金鑰能成功解密得到內容摘要,證明此內容確乃認證開發人員發布,即來源可信;
  • (2)再對內容本身使用雜湊演算法計算摘要,若與上一步得到的摘要一致,則證明內容未被篡改過,即內容可信。

.在多台機器上實現開發賬戶/認證共用

若在Xcode Preferences添加了該Accounts,選中Team條目|ViewDetails:可以查看Signing Identities和ProvisioningProfiles。

  • 選中欲匯出的Account,點擊+-之後的?|ExportAccounts,可匯出包含account/code signingidentity/provisioning profiles資訊的*.developerprofile(Exporting a Developer Profile)檔案供其他機器上的Xcode開發使用(Import該Account)。
  • 選中欲匯出的Signing Identity條目,點擊欄底+之後的?|Export,必須輸入密碼,並需授權exportkey "privateKey" from keychain,將匯出Certificates.p12;或在Keychain Access|Certificates中選中欲匯出的certificate或其下private key,右鍵Export或者通過菜單File|Export Items匯出Certificates.p12

其他Mac機器上雙擊Certificates.p12(如有密碼需輸入密碼)即可安裝該共用認證,在開發人員網站上將欲調試的iOS裝置註冊到該開發人員帳號名下,並下載對應認證授權了iOS調試裝置的Provisioning Profile檔案即可在iOS真機裝置上開發調試。


參考:

《iPhone真機調試應用程式》《iOS Developer:真機測試》

《關於Certificate、Provisioning Profile、App ID的介紹及其關係》

《iOS Development--Certificates, Provisioning Profiles》


《數位簽章和數位憑證》《蘋果開發人員帳號那些事兒》

《程式碼簽署探析/Inside Code Signing》《iOS Code Signing 學習筆記》


iOS認證相關概念詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.