1. 程式人生 > IOS開發 >關於iOS證書配置介紹

關於iOS證書配置介紹

一、概念介紹

登入開發者賬號,開啟Certificates,Indentifiers & Profiles,可以看到如下內容

證書目錄結構
證書目錄結構

上面的列表就包含了開發、除錯和釋出iOS應用程式所需的所有內容:Certificates(證書)、Identifiers(識別符號)、Devices(裝置)、Provisioning Profiles(授權配置檔案)。下面將一一解釋這幾個東東。

1、Certificate

證書是用來給應用程式簽名的,只有經過簽名的應用程式才能保證他的來源是可信任的,並且程式碼是完整的,未經修改的。在Xcode Build SettingCode Signing Identity

中,你可以設定用於為程式碼簽名的證書。

在我們申請一個Certificate之前,需要先申請一個Certificate Signing Request檔案(即CSR檔案)。

申請CSR檔案,這個過程中實際上是生成了一對公鑰和私鑰,儲存在你Mac的Keychain中。

程式碼簽名正是使用這種基於非對稱祕鑰的加密方式,用私鑰進行簽名,用公鑰進行驗證。如下圖所示,在你Mac的keychain的login中儲存著相關的公鑰和私鑰,而證書中包含了公鑰。

你只能用私鑰來進行簽名,所以如果沒有了私鑰,就意味著你不能進行簽名了,所以就無法使用這個證書了,此時你只能revoke之前的證書,再申請一個。

因此在申請完證書時,最好匯出並儲存好你的私鑰,當然CSR檔案也要一併儲存好。

當你想與其他人或其他裝置共享證書時,把私鑰傳給它就可以了。

私鑰儲存在你的Mac中,而蘋果生成的Certificate中包含了公鑰。

當你用自己的私鑰對程式碼簽名後,蘋果就可以用證書中的公鑰來進行驗證,確保是你對程式碼進行了簽名,而不是別人冒充你,同時也確保程式碼的完整性等。

CSR結構
CSR結構

證書主要分為兩類:DevelopmentProduction

Development證書用來開發和除錯應用程式,

Production主要用來分發應用程式(根據證書種類有不同作用),

下面是證書的分類資訊:

注:不同型別的開發者賬戶所能建立的證書種類不同,此處不做對比

  • Development
    • App Development:用來開發和真機除錯應用程式。
    • Push Development:用來除錯Apple Push Notification
  • Production
    • App Store and Ad Hoc:用來發布提交App Store的應用程式。
    • Apple Push Notification service SSL (Sandbox & Production) :用來在釋出版本中使用Apple Push Notification。
    • 其他,唧唧歪歪……(各種原因,省略好多字……)

2、App ID

App ID用於標識一個或者一組App,App ID應該是和Xcode中的Bundle ID是一致的或者匹配的。App ID主要有以下兩種:

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

2.1、App Services

每建立一個App ID,我們都可以設定該App ID所使用的APP Services,也就是其所使用的額外服務。

Enable Services:
Access WiFi Information
App Groups
Apple Pay Payment Processing
Associated Domains
AutoFill Credential Provider
ClassKit
Data Protection
	Complete Protection
	Protected Unless Open
	Protected Until First User Authentication
Game Center
HealthKit
HomeKit
Hotspot
iCloud
	Compatible with Xcode 5
	Include CloudKit support (requires Xcode 6)
In-App Purchase		【蘋果內購】
Inter-App Audio
Multipath
Network Extensions
NFC Tag Reading
Personal VPN
Push Notifications		【訊息推送服務】
SiriKit
Wallet
Wireless Accessory Configuration
複製程式碼

3、Device

Device最簡單了,就是iOS裝置。Devices中包含了該賬戶中所有可用於開發和測試的裝置。 每臺裝置使用UDID來唯一標識。

每個賬戶中的裝置數量限制是100個。Disable 一臺裝置也不會增加名額,只能在membership year 開始的時候才能通過刪除裝置來增加名額。

4、Provisioning Profile

一個Provisioning Profile檔案包含了上述的所有內容:證書、App ID、裝置。

試想一下,如果我們要打包或者在真機上執行一個應用程式,我們首先需要證書來進行簽名,用來標識這個應用程式是合法的、安全的、完整的等等;然後需要指明它的App ID,並且驗證Bundle ID是否與其一致;再次,如果是真機除錯,需要確認這臺裝置能否用來執行程式。而Provisioning Profile就把這些資訊全部打包在一起,方便我們在除錯和釋出程式打包時使用,這樣我們只要在不同的情況下選擇不同的profile檔案就可以了。而且這個Provisioning Profile檔案會在打包時嵌入.ipa的包裡。

例如,如下圖所示,一個用於Development的Provisioning Profile中包含了該Provisioning Profile對應的App ID,可使用的證書和裝置。這意味著使用這個Provisioning Profile打包程式必須擁有相應的證書,並且是將App ID對應的程式執行到Devices中包含的裝置上去。

授權配置檔案結構
授權配置檔案結構

與證書一樣,Provisioning Profile也分為Development和Distribution兩種:

注:前面提到不同賬戶型別所能建立的證書種類不同,顯然Profile檔案的種類是和你所能建立的證書種類相關的)

  • Development
    • iOS App Development
    • 其他,唧唧歪歪……
  • Distribution
    • App Store
    • 其他,唧唧歪歪……

二、iOS證書配置指南(基本配置模式)

1、建立應用Identifiers - App ID

  • 步驟0:進入應用建立頁面。選擇Identifiers - App IDs - +,如下圖

    建立應用0
    建立應用0

  • 步驟1:編輯你的應用id名稱,該名稱將App IDs列表頁面的Name一欄顯示

    建立應用1
    建立應用1

  • 步驟2:建立一個應用的唯一標識,在App ID Suffix中選擇Explicit App ID,並填寫Bundle ID與你在App Store Connect建立的應用的Bundle ID一樣

    建立應用2
    建立應用2

注意:這裡的Bundle ID沒有 * 號(與萬用字元 App ID不同,萬用字元中含有 * 號,可用於字首相同的所有應用)

  • 步驟3:在App Services中,勾選需要的額外服務,例如:推送服務Push Notifications

  • 步驟4:檢查配置內容,下一步到結束。

2、建立Certificate

2.1、建立開發者賬號證書

開發者賬號證書,開發者賬號下,所有的App ID均需要該證書,

  • 步驟0:進入新建證書頁面。選擇Certificates - All - +,如下圖

    Certjfjcate建立流程0
    Certjfjcate建立流程0

  • 步驟1:Select Type 選擇證書型別。例如,建立開發環境證書,Development - iOS App Development,然後點選下一步

    Certjfjcate建立流程1
    Certjfjcate建立流程1

  • 步驟2:Request,直接點選下一步即可。這個頁面是在教你怎麼建立一個CSR檔案,步驟3需要用到

  • 步驟3:Generate 生成證書,點選Choose File...按鈕,上傳你的CSR檔案,然後點選下一步

    Certjfjcate建立流程3
    Certjfjcate建立流程3

  • 步驟4:Download 下載生成好的證書。證書格式字尾為.cer

釋出環境開發者賬號證書建立流程同上。步驟1中選擇Production - App Store and Ad Hoc

3、建立Provisioning Profile(授權配置檔案)

  • 步驟0:進入授權配置檔案建立頁面。選擇Provisioning Profiles - All - +

  • 步驟1:Select Type 選擇授權配置檔案型別。例如,建立開發環境使用的授權配置檔案,Development - iOS App Development,然後點選下一步

    建立授權配置檔案1
    建立授權配置檔案1

  • 步驟2:配置授權資訊

    • 步驟2.1:Configure 配置App ID
    • 步驟2.1:Configure 配置Certjfjcate
    • 步驟2.3:Configure 配置Devices
  • 步驟3:Generate 生成授權配置檔案,新增個名稱即可

  • 步驟4:Download 下載生成好的授權配置檔案。檔案格式字尾為.mobileprovision

釋出環境授權配置檔案建立流程同上,步驟1中選擇Distribution - App Store

4、最終下載的證書

  1. kaifazhe_dev.cer --> 開發者賬號證書_開發環境
  2. kaifazhe_dis.cer --> 開發者賬號證書_釋出環境
  3. appid_dev.mobileprovision --> 應用授權配置檔案_開發環境
  4. appid_dis.mobileprovision --> 應用授權配置檔案_釋出環境

三、關於我們的應用需要的證書

1、一個應用需要哪些證書檔案?

例子1.1:建立一個應用證書

有個開發者:kaifazhe

Ta有個應用:yingyong

應用的bundle id是:com.kaifazhe.yingyong

步驟如下:

  1. 準備材料:CSR檔案
  2. 建立開發者(賬號)證書:Certificate - 選擇iOS App型別證書 - 上傳CSR - 生成2個開發者證書(kaifazhe_dev.cerkaifazhe_dis.cer
  3. 建立應用App ID:App IDs - 填寫Explicit App ID(與蘋果應用後臺的應用bundle id一致,如例子中的com.kaifazhe.yingyong )
  4. 建立授權配置檔案:Provisioning Profile - 選擇App ID(步驟3建立的那個) - 選擇Certificate(步驟2建立的那個開發者證書) - 生成2個授權配置檔案
一波操作之後,總共獲得檔案4個
kaifazhe_dev.cer
kaifazhe_dis.cer
comkaifazheyingyong_dev.mobileprovision
comkaifazheyingyong_dis.mobileprovision
複製程式碼

注意:步驟2中,一般一個開發者賬號只要一個開發者證書即可,賬號下所有App ID都可以使用的

例子1.2、給yingyong新增蘋果推送服務證書(APNs證書)

步驟如下:

  1. 準備材料:CSR檔案(還是例子1.1中的那個CSR)
  2. 建立APNs證書:Certificate - 選擇Apple Push Notification service SSL型別證書 - 選擇App ID - 上傳CSR - 生成2個push證書
一波操作之後,總共獲得檔案2個
comkaifazheyingyong_dev.cer
comkaifazheyingyong_dev.cer
複製程式碼

注意:這2個證書,客戶端開發人員是不需要,直接轉換為.p12格式配置到推送後臺即可。

.cer.p12,將.cer新增到Mac電腦的keychain.app中,然後從keychan中匯出即是.p12格式。

例子1.3、iOS 10新增富文字推送服務,

步驟如下:

  1. 建立應用萬用字元App ID:App IDs - 填寫Wildcard App ID(com.kaifazhe.yingyong.*)
  2. 建立授權配置檔案:Provisioning Profile - 選擇App ID(步驟1建立的那個com.kaifazhe.yingyong.*) - 選擇Certificate(例子1.1步驟2建立的那個開發者證書) - 生成2個授權配置檔案
一波操作之後,總共獲得檔案2個
comkaifazheyingyong_appgroup_dev.mobileprovision 
comkaifazheyingyong_appgroup_dis.mobileprovision
複製程式碼

例子1.4、富文字推送、today等外掛如何建立App IDProvisioning Profile

這類外掛,均是依託於應用的。一般不需要建立唯一標識的App ID。

視情況,採用不同的萬用字元App ID(即:Wildcard App ID),此類App ID通常含有*號,例如:com.kaifazhe.*表示以com.kaifazhe.開頭的所有應用程式;com.kaifazhe.yingyong.*則表示以com.kaifazhe.yingyong.開頭的所有應用程式。

換個理解方式。

App ID 採用反向域名的形式。一般的App ID,可這樣解讀:com.開發者.應用名,則com.kaifazhe.*表示該萬用字元適用範圍為這個開發者kaifazhe的所有應用;而com.kaifazhe.yingyong.*則表示該萬用字元適用範圍為開發者kaifazhe的應用yingyong所附帶的所有子應用(如富文字推送、today等均屬於這類)

步驟如下:

  1. 建立外掛適用的萬用字元App ID:一般外掛歸屬於應用,則萬用字元格式為com.開發者.應用名.*
  2. 建立授權配置檔案:Provisioning Profile - 選擇App ID(步驟1建立的那個com.kaifazhe.yingyong.*) - 選擇Certificate(例子1.1步驟2建立的那個開發者證書) - 生成2個授權配置檔案
一波操作之後,總共獲得檔案2個
應用子程式萬用字元的授權配置檔案
comkaifazheyingyong_appgroup_dev.mobileprovision
comkaifazheyingyong_appgroup_dis.mobileprovision
或
開發者的應用程式萬用字元的授權配置檔案
comkaifazhe_team_dev.mobileprovision
comkaifazhe_team_dis.mobileprovision
複製程式碼

萬用字元App ID 相關授權配置檔案命名規則,bundle id + appgroup(代表應用子程式集合)或team(開發者應用集合) 當然,com.kaifazhe.*的子集 是包含com.kaifazhe.yingyong.*

附錄:About Creating a Certificate Signing Request (CSR)

To manually generate a Certificate,you need a Certificate Signing Request (CSR) file from your Mac. To create a CSR file,follow the instructions below to create one using Keychain Access.

Create a CSR file. In the Applications folder on your Mac,open the Utilities folder and launch Keychain Access.

Within the Keychain Access drop down menu,select Keychain Access > Certificate Assistant > Request a Certificate from a Certificate Authority.

In the Certificate Information window,enter the following information:

In the User Email Address field,enter your email address.
In the Common Name field,create a name for your private key (e.g.,John Doe Dev Key).
The CA Email Address field should be left empty.
In the "Request is" group,select the "Saved to disk" option.
Click Continue within Keychain Access to complete the CSR generating process.
複製程式碼