iOS證書大全

一. 前言

iOS各類證書一直很復(fù)雜毫目,即使擁有多年開發(fā)經(jīng)驗(yàn)的開發(fā)者,還是會(huì)搞混淆牵现。本文從全方面來(lái)剖析iOS證書機(jī)制修陡。

二.iOS 簽名機(jī)制

我們先來(lái)了解一下 ipa 包的簽名機(jī)制
image.png

開發(fā)者 Mac 系統(tǒng)中生成一對(duì)非對(duì)稱加密算法的公私鑰 M,將公鑰和開發(fā)者信息生成 CSR 文件給到蘋果服務(wù)器 蘋果有自己的公私鑰 K善玫,其中公鑰 K 存在每一臺(tái)的 iPhone 設(shè)備上水援,私鑰 K 則保存在蘋果服務(wù)器。根據(jù) CSR 內(nèi)容利用私鑰 K 進(jìn)行簽名并生成證書茅郎,同時(shí)也根據(jù)在開發(fā)者后臺(tái)填寫的信息(Bundle ID蜗元,權(quán)限等)和證書生成描述文件(mobileprovision) 在開發(fā)者設(shè)備上打包時(shí),會(huì)把描述文件一并打包到 ipa 中系冗,并利用私鑰 M 對(duì)包的內(nèi)容進(jìn)行簽名 在安裝到設(shè)備上時(shí)奕扣,會(huì)進(jìn)行兩次驗(yàn)證:利用設(shè)備上的公鑰 K 校驗(yàn) ipa 包內(nèi)的證書文件(證書是通過(guò)蘋果私鑰 K 簽名),校驗(yàn)證書是否有效 上一步證書校驗(yàn)通過(guò)后掌敬,會(huì)拿出證書內(nèi)的公鑰 M 來(lái)校驗(yàn) ipa 包(ipa 包是通過(guò)開發(fā)者私鑰 M簽名)惯豆,校驗(yàn) ipa 包是否可安裝

蘋果通過(guò)以上的雙重驗(yàn)證機(jī)制池磁,來(lái)確保在開發(fā)階段 App 的安裝行為的合法性。當(dāng)將 App 提交到 App Store 后楷兽,蘋果會(huì)對(duì) App 重新加密簽名地熄,安裝時(shí)就只需驗(yàn)證蘋果的簽名。
推薦一個(gè)重簽名工具:iOS-App-Signer

三.各種證書詳解

1.開發(fā)者賬號(hào)

個(gè)人:99 美元/年芯杀,不需要鄧白氏碼端考,可上線AppStore
公司:99 美元/年,需要鄧白氏碼瘪匿,可上線AppStore跛梗,允許團(tuán)隊(duì)協(xié)作
企業(yè):299 美元/年寻馏,需要鄧白氏碼棋弥,不可上線AppStore,允許團(tuán)隊(duì)協(xié)作

2.iOS證書

iOS證書是用來(lái)證明iOS App內(nèi)容(executable code)的合法性和完整性的數(shù)字證書诚欠。對(duì)于想安裝到真機(jī)或發(fā)布到AppStore的應(yīng)用程序(App)顽染,只有經(jīng)過(guò)簽名驗(yàn)證(Signature Validated)才能確保來(lái)源可信,并且保證App內(nèi)容是完整轰绵、未經(jīng)篡改的

  • 開發(fā)證書:Development證書用來(lái)開發(fā)和調(diào)試應(yīng)用程序
  • 發(fā)布證書:Production主要用來(lái)分發(fā)應(yīng)用程序

普通個(gè)人開發(fā)賬號(hào)最多可注冊(cè)iOS Development/Distribution證書各2個(gè)粉寞,用戶可在網(wǎng)站上刪除(Revoke)已注冊(cè)的Certificate

3.App ID和設(shè)備

  • 較為簡(jiǎn)單,此處略過(guò)

4.CSR描述文件

  • 通過(guò)Keychain證書助理從證書頒發(fā)機(jī)構(gòu)請(qǐng)求證書
  • Keychain將生成一個(gè)包含開發(fā)者身份信息的CSR(Certificate Signing Request)文件
  • Private Key始終保存在Mac OS的Keychain Access中左腔,用于簽名(CodeSign)對(duì)外發(fā)布的App
  • Public Key一般隨證書(隨Provisioning Profile唧垦,隨App)散布出去,對(duì)App簽名進(jìn)行校驗(yàn)認(rèn)證液样。用戶必須保護(hù)好本地Keychain中的private key振亮,以防偽冒
  • Apple證書頒發(fā)機(jī)構(gòu)WWDRCA(Apple Worldwide Developer Relations Certification Authority)將使用Private Key對(duì)CSR中的public key和一些身份信息進(jìn)行加密簽名生成數(shù)字證書(ios_development.cer)并記錄在案(Apple Member Center)

從Apple Member Center網(wǎng)站下載證書到Mac上雙擊即可安裝(當(dāng)然也可在Xcode中添加開發(fā)賬號(hào)自動(dòng)同步證書和[生成]配置文件)。證書安裝成功后鞭莽,在KeychainAccess|登錄|密鑰 中展開創(chuàng)建CSR時(shí)生成的Key Pair中的私鑰前面的箭頭坊秸,可以查看到包含其對(duì)應(yīng)公鑰的證書(Your requested certificate will be the public half of the key pair.);在Keychain Access|登錄|證書 中展開安裝的證書(ios_development.cer)前面的箭頭澎怒,可以看到其對(duì)應(yīng)的私鑰喷面。

image.png

image.png

4.配置文件Provisioning Profile

  • Provisioning Profile文件包含了上述的所有內(nèi)容: 證書咬像、App ID和設(shè)備陷舅。


    image.png

    一個(gè)Provisioning Profile對(duì)應(yīng)一個(gè)Explicit App ID或Wildcard App ID(一組相同Prefix/Seed的App IDs)。在網(wǎng)站上手動(dòng)創(chuàng)建一個(gè)Provisioning Profile時(shí)仰剿,需要依次指定App ID(單選)誊酌、證書(Certificates,可多選)和設(shè)備(Devices比勉,可多選)幢哨。用戶可在網(wǎng)站上刪除(Delete)已注冊(cè)的Provisioning Profiles。
    Provisioning Profile決定Xcode用哪個(gè)證書(公鑰)/私鑰組合(Key Pair/Signing Identity)來(lái)簽署應(yīng)用程序(Signing Product),將在應(yīng)用程序打包時(shí)嵌入到.ipa包里。安裝應(yīng)用程序時(shí)拷邢,Provisioning Profile文件被拷貝到iOS設(shè)備中忽洛,運(yùn)行該iOS App的設(shè)備也通過(guò)它來(lái)認(rèn)證安裝的程序。
    如果要打包或者在真機(jī)上運(yùn)行一個(gè)APP复哆,一般要經(jīng)歷以下三步:

  • 首先,需要指明它的App ID,并且驗(yàn)證Bundle ID是否與其一致臼隔;
  • 其次,需要證書對(duì)應(yīng)的私鑰來(lái)進(jìn)行簽名,用于標(biāo)識(shí)這個(gè)APP是合法、安全痰滋、完整的严望;
  • 然后,如果是真機(jī)調(diào)試,需要確認(rèn)這臺(tái)設(shè)備是否授權(quán)運(yùn)行該APP轻局。

5.團(tuán)隊(duì)配置文件Team Provisioning Profile

  • 概念:每個(gè)Apple開發(fā)者賬號(hào)都對(duì)應(yīng)一個(gè)唯一的 Team ID,Xcode早期發(fā)布版本中加入了Team Provisioning Profile這項(xiàng)新功能样刷。
  • 在Xcode中添加Apple Developer Account時(shí)仑扑,它將與Apple Member Center后臺(tái)勾兌 自動(dòng)生成iOS Team Provisioning Profile(Managed by Xcode)。


    image.png

    image.png

Team Provisioning Profile包含一個(gè)為Xcode iOS Wildcard App ID()生成的iOS Team Provisioning Profile:(匹配所有應(yīng)用程序)置鼻,賬戶里所有的Development Certificates和Devices都可以使用它在這個(gè)team注冊(cè)的所有設(shè)備上調(diào)試所有的應(yīng)用程序(不管bundle identifier是什么)镇饮。同時(shí),它還會(huì)為開發(fā)者自己創(chuàng)建的Wildcard/Explicit App IDs創(chuàng)建對(duì)應(yīng)的iOS Team Provisioning Profile箕母。

  • Team Provisioning Profile生成/更新時(shí)機(jī)
    • Add an Apple ID account to Xcode
    • Fix issue "No Provisioning Profiles with a valid signing identity" in Xcode
    • Assign Your App to a Team in Xcode project settings of General|Identity
    • Register new device on the apple development website or Xcode detected new device connected
  • 利用Xcode生成和管理的iOS Team Provisioning Profile來(lái)進(jìn)行開發(fā)非常方便储藐,可以不需要上網(wǎng)站手動(dòng)生成下載Provisioning Profile。
    Team Provisioning Profile同Provisioning Profile嘶是,只不過(guò)是由Xcode自動(dòng)生成的钙勃,也被配置到【XcodeTarget|Build Settings|Code Signing|Provisioning Profile】下。

6.證書與簽名

  • Code Signing Identity
    image.png

    image.png

    Xcode中配置的Code Signing Identity(entitlements聂喇、certificate)必須與Provisioning Profile匹配辖源,并且配置的Certificate必須在本機(jī)Keychain Access中存在對(duì)應(yīng)Public/Private Key Pair,否則編譯會(huì)報(bào)錯(cuò)希太。
    Xcode所在的Mac設(shè)備(系統(tǒng))使用CA證書(WWDRCA.cer)來(lái)判斷Code Signing Identity中Certificate的合法性:
  • 若用WWDRCA公鑰能成功解密出證書并得到公鑰(Public Key)和內(nèi)容摘要(Signature)克饶,證明此證書確乃AppleWWDRCA發(fā)布,即證書來(lái)源可信誊辉;
  • 再對(duì)證書本身使用哈希算法計(jì)算摘要矾湃,若與上一步得到的摘要一致,則證明此證書未被篡改過(guò)堕澄,即證書完整邀跃。
  • Code Signing
    每個(gè)證書(其實(shí)是公鑰)對(duì)應(yīng)Key Pair中的私鑰會(huì)被用來(lái)對(duì)內(nèi)容進(jìn)行數(shù)字簽名(CodeSign)——使用哈希算法生成內(nèi)容摘要(digest)。
    Xcode使用指定證書配套的私鑰進(jìn)行簽名時(shí)需要授權(quán)奈偏,選擇【始終允許】后坞嘀,以后使用該私鑰進(jìn)行簽名便不會(huì)再?gòu)棾鍪跈?quán)確認(rèn)窗口。
    image.png
  • Verify Code Signature with Certificate
    上面已經(jīng)提到惊来,公鑰被包含在數(shù)字證書里丽涩,數(shù)字證書又被包含在描述文件(Provisioning File)中,描述文件在應(yīng)用被安裝的時(shí)候會(huì)被拷貝到iOS設(shè)備中。
    第一步矢渊,App在Mac/iOS真機(jī)上啟動(dòng)時(shí)继准,需要對(duì)配置的bundle ID、entitlements和certificate與Provisioning Profile進(jìn)行匹配校驗(yàn):
    image.png

    第二步矮男,iOS/Mac真機(jī)上的ios_development.cer被AppleWWDRCA.cer中的 public key解密校驗(yàn)合法后移必,獲取每個(gè)開發(fā)證書中可信任的公鑰對(duì)App的可靠性和完整性進(jìn)行校驗(yàn)。
    iOS/Mac設(shè)備(系統(tǒng))使用App Provisioning Profile(Code Signing Identity)中的開發(fā)證書來(lái)判斷App的合法性:
  • 若用證書公鑰能成功解密出App(executable code)的內(nèi)容摘要(Signature)毡鉴,證明此App確乃認(rèn)證開發(fā)者發(fā)布崔泵,即來(lái)源可信;
  • 再對(duì)App(executable code)本身使用哈希算法計(jì)算摘要猪瞬,若與上一步得到的摘要一致憎瘸,則證明此App(executable code)未被篡改過(guò),即內(nèi)容完整陈瘦。
  • 小結(jié):
    • 基于Provisioning Profile校驗(yàn)了CodeSign的一致性幌甘;
    • 基于Certificate校驗(yàn)App的可靠性和完整性;
    • 啟動(dòng)時(shí)痊项,真機(jī)的device ID(UUID)必須在Provisioning Profile的ProvisionedDevices授權(quán)之列锅风。

7.在多臺(tái)機(jī)器上共享開發(fā)賬戶/證書

image.png
  • 1.Xcode導(dǎo)出開發(fā)者賬號(hào)(*.developerprofile)和 PKCS12文件(*.p12)
    • 進(jìn)入Xcode Preferences|Accounts:
    • 選中Apple IDs列表中對(duì)應(yīng)Account的的Email,點(diǎn)擊+-之后的?|Export Apple ID And Code Signing Assets...鞍泉,可導(dǎo)出包含account/code signing identity/provisioning profiles信息的*.developerprofile(Exporting a Developer Profile)文件供其他機(jī)器上的Xcode開發(fā)使用(Import該developerprofile)皱埠。
  • 2.Keychain Access導(dǎo)出PKCS12文件(*.p12)
    • 在Keychain Access|Certificates中選中欲導(dǎo)出的certificate或其下private key,右鍵Export或者通過(guò)菜單File|Export Items導(dǎo)出Certificates.p12——PKCS12 file holds the private key and certificate塞弊。
  • 其他Mac機(jī)器上雙擊Certificates.p12(如有密碼需輸入密碼)即可安裝該共享證書漱逸。有了共享證書之后泪姨,在開發(fā)者網(wǎng)站上將欲調(diào)試的iOS設(shè)備注冊(cè)到該開發(fā)者賬號(hào)名下游沿,并下載對(duì)應(yīng)證書授權(quán)了iOS調(diào)試設(shè)備的Provisioning Profile文件,方可在iOS真機(jī)設(shè)備上開發(fā)調(diào)試肮砾。

8.其他

  • 云管理式證書
    • 一種新的管理證書方式诀黍,比較牛逼
    • 簡(jiǎn)述:在更新xcode13后,蘋果上線了一種新的證書——云管理式證書仗处,包括Distribution Managed和Development Managed眯勾。在打包或真機(jī)運(yùn)行的時(shí)候可以使用云管理式證書對(duì)其應(yīng)用進(jìn)行簽名,而且這種證書可以自動(dòng)發(fā)起輪換婆誓,即不需要關(guān)心他的過(guò)期時(shí)間吃环。同時(shí),既然叫云管理證書洋幻,那也就不需要下載到本地鑰匙串了郁轻。整個(gè)簽名過(guò)程在蘋果服務(wù)器線上完成。
      蘋果的這個(gè)功能大大簡(jiǎn)化了開發(fā)的步驟,過(guò)去在開發(fā)之前好唯,需要配置和導(dǎo)入一系列證書竭沫。而現(xiàn)在在一臺(tái)新電腦上進(jìn)行開發(fā)和打包,只需要登錄對(duì)應(yīng)的Apple ID就可以直接編譯運(yùn)行和打包了骑篙,其他事情不需要開發(fā)者關(guān)心蜕提。
    • 詳情參考鏈接
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市靶端,隨后出現(xiàn)的幾起案子谎势,更是在濱河造成了極大的恐慌,老刑警劉巖杨名,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲫骗,死亡現(xiàn)場(chǎng)離奇詭異策治,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門谎倔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人侯勉,你說(shuō)我怎么就攤上這事焕盟。” “怎么了介衔?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵恨胚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我炎咖,道長(zhǎng)赃泡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任乘盼,我火速辦了婚禮升熊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绸栅。我一直安慰自己级野,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布粹胯。 她就那樣靜靜地躺著蓖柔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪风纠。 梳的紋絲不亂的頭發(fā)上况鸣,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音竹观,去河邊找鬼镐捧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的愤估。 我是一名探鬼主播帮辟,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼玩焰!你這毒婦竟也來(lái)了由驹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤昔园,失蹤者是張志新(化名)和其女友劉穎蔓榄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體默刚,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡甥郑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荤西。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澜搅。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖邪锌,靈堂內(nèi)的尸體忽然破棺而出勉躺,到底是詐尸還是另有隱情,我是刑警寧澤觅丰,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布饵溅,位于F島的核電站,受9級(jí)特大地震影響妇萄,放射性物質(zhì)發(fā)生泄漏蜕企。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一冠句、第九天 我趴在偏房一處隱蔽的房頂上張望轻掩。 院中可真熱鬧,春花似錦轩端、人聲如沸放典。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至壳影,卻和暖如春拱层,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宴咧。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工根灯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓烙肺,卻偏偏與公主長(zhǎng)得像纳猪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子桃笙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容