摘要:在上一篇中的代碼簽名一數(shù)字簽名基本概念中,我們簡(jiǎn)單解釋了數(shù)字簽名證書的基本概念以及實(shí)際作用,在這一篇,我們主要結(jié)合應(yīng)用的上傳過(guò)程來(lái)說(shuō)說(shuō)代碼簽名的實(shí)際過(guò)程。參考,從這里可以獲取一些安全知識(shí)的大概了解,這里詳細(xì)解釋了數(shù)字簽名認(rèn)證的過(guò)程
在上一篇iOS 中的代碼簽名(一)—— 數(shù)字簽名基本概念中,我們簡(jiǎn)單解釋了數(shù)字簽名、證書的基本概念以及實(shí)際作用,在這一篇,我們主要結(jié)合應(yīng)用的上傳過(guò)程來(lái)說(shuō)說(shuō)代碼簽名的實(shí)際過(guò)程。
1. 獲取 signing identity 與證書首先在我們的系統(tǒng)鑰匙串的系統(tǒng)根證書列表中,是存在著蘋果的 Root CA 簽發(fā)的根證書的。
在我們第一次打開 Xcode 的時(shí)候,Xcode 會(huì)在系統(tǒng)的鑰匙串中添加蘋果的『Apple Worldwide Developer Relations Certification Authority』,這個(gè)證書是被根證書信任的,這樣我們就建立了可信的證書信任鏈。
在蘋果的官方文檔中,將數(shù)字簽名用到的公鑰和私鑰統(tǒng)稱為 Signing Indetity,在 iOS 的打包發(fā)布過(guò)程中,我們首先需要做的就是去生成公鑰私鑰并從蘋果那里獲得證書。
首先,我們需要?jiǎng)?chuàng)建公鑰和私鑰,在 OSX 中我們可以通過(guò)鑰匙串訪問(wèn)的證書助理創(chuàng)建一個(gè)CertificateSigningRequest.certSigningRequest文件,當(dāng)這個(gè)文件穿件完畢后,鑰匙串中的密鑰項(xiàng)目中就會(huì)多出一對(duì)公鑰和私鑰。此時(shí)的公鑰和私鑰還是孤立的狀態(tài)。
而CertificateSigningRequest.certSigningRequest文件的內(nèi)容也很簡(jiǎn)單,就是我們剛剛創(chuàng)建好的公鑰內(nèi)容。(使用 vim 打開查看,實(shí)際上的公鑰和私鑰一般都是這樣子的一串很長(zhǎng)的字符序列)
接下來(lái)我們要做的就是把這個(gè)文件上傳到蘋果的 MemberCenter (簡(jiǎn)稱 MC 哈),然后 MC 會(huì)利用我們的公鑰和個(gè)人信息生成對(duì)應(yīng)的證書。我們接下來(lái)點(diǎn)擊下載并雙擊證書,在鑰匙串里頭就會(huì)把證書和對(duì)應(yīng)的公鑰私鑰進(jìn)行關(guān)聯(lián)。
這樣,我們就擁有了屬于我們自己的,獨(dú)一無(wú)二的 signing identity。
2. 創(chuàng)建 Provisioning Profile當(dāng)我們成功創(chuàng)建證書以后,我們一般還需要在蘋果的 MC 上添加我們 APP 的 bundle ID 和設(shè)備的 UUID,最后我們需要在 MC 上針對(duì)證書、bundle ID 、bundle ID 對(duì)應(yīng)的能力以及對(duì)應(yīng)的設(shè)備進(jìn)行配置,最終生成一個(gè)mobileprovision文件,這個(gè)文件的細(xì)節(jié)我們將會(huì)在下一篇進(jìn)行講解,現(xiàn)在我們先記住這個(gè)文件中保存了我們創(chuàng)建的證書列表就好。
3. 對(duì)代碼的產(chǎn)物進(jìn)行簽名當(dāng)我們完成開發(fā)后,會(huì)使用 Xcode 的 Archive(存檔) 的功能進(jìn)行打包,當(dāng)我們點(diǎn)擊了 Archive 以后,Xcode 就會(huì)對(duì)我們的代碼進(jìn)行編譯和鏈接,最終產(chǎn)生一個(gè)后綴為.app文件(嚴(yán)格意義上來(lái)說(shuō)這是一個(gè)文件夾,是 Mac 上的包文件,終端里頭是把這個(gè)文件當(dāng)做文件夾對(duì)待的)。然后 Xcode 會(huì)把對(duì)應(yīng)的mobileprovision文件拷貝到 APP 文件中(這個(gè)文件就是我們?cè)谇懊媾渲?provision profile 后下載下來(lái)的文件),這一步的詳情可以在 Archive 的 log 中的『Process product packaging』這一步中看到;再之后,Xcode 會(huì)使用codesign這個(gè)命令對(duì) APP 文件進(jìn)行簽名。
如果我們有多個(gè) Signing Identity,我們也可以在工程『Build Settings』選項(xiàng)中進(jìn)行配置
那具體codesign命令是如何進(jìn)行簽名的呢?一個(gè)沒(méi)有被簽名的 APP 文件的結(jié)構(gòu)類似這樣:
TestOC.app ├── Base.lproj │ ├── LaunchScreen.storyboardc │ │ ├── 01J-lp-oVM-view-Ze5-6b-2t3.nib │ │ ├── Info.plist │ │ └── UIViewController-01J-lp-oVM.nib │ └── Main.storyboardc │ ├── BYZ-38-t0r-view-8bC-Xf-vdC.nib │ ├── Info.plist │ └── UIViewController-BYZ-38-t0r.nib ├── Info.plist ├── PkgInfo ├── TestOC(二進(jìn)制文件) └── embedded.mobileprovision
codesign 在對(duì) APP 文件進(jìn)行簽名的時(shí)候,會(huì)把對(duì)應(yīng)的簽名直接添加到二進(jìn)制文件的內(nèi)部,而針對(duì)資源文件則是利用一個(gè)叫做 『CodeResources』的 plist 文件把對(duì)應(yīng)的資源文件和數(shù)字簽名進(jìn)行記錄。簽名結(jié)束后的 APP 文件的內(nèi)容如下:
TestOC.app ├── Base.lproj │ ├── LaunchScreen.storyboardc │ │ ├── 01J-lp-oVM-view-Ze5-6b-2t3.nib │ │ ├── Info.plist │ │ └── UIViewController-01J-lp-oVM.nib │ └── Main.storyboardc │ ├── BYZ-38-t0r-view-8bC-Xf-vdC.nib │ ├── Info.plist │ └── UIViewController-BYZ-38-t0r.nib ├── Info.plist ├── PkgInfo ├── TestOC ├── _CodeSignature │ └── CodeResources └── embedded.mobileprovision
最后,我們可以使用 Xcode 打包生成對(duì)應(yīng)的 ipa ,方便之后安裝到設(shè)備上。
4. iOS 設(shè)備進(jìn)行驗(yàn)證在 iOS 設(shè)備這一端,蘋果的相關(guān)證書在出廠設(shè)置系統(tǒng)的時(shí)候就已經(jīng)設(shè)置好了,所以可以認(rèn)為其和蘋果的通信是安全的。iOS 設(shè)備在得到 ipa 之后,首先會(huì)把 ipa 進(jìn)行解壓,然后通過(guò) APP 文件中的 mobileprovision 文件去下載其對(duì)應(yīng)的證書,然后從證書中取得開發(fā)者的公鑰,從而對(duì) ipa 進(jìn)行了數(shù)字簽名的認(rèn)證。
參考About Software Security,從這里可以獲取一些安全知識(shí)的大概了解
Cryptography Concepts In Depth,這里詳細(xì)解釋了數(shù)字簽名認(rèn)證的過(guò)程
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11202.html
摘要:原文匠心打造簽名組件導(dǎo)讀月又是項(xiàng)目吃緊的時(shí)候,一大波需求襲來(lái),猝不及防??梢韵却吝@里體驗(yàn)把后面將要提到的簽名組件。剩下的也是綁定事件中關(guān)鍵的一步。設(shè)置完成了上述功能,一個(gè)簽名插件就已經(jīng)成型了。 本文首發(fā)于CSDN網(wǎng)站,下面的版本又經(jīng)過(guò)進(jìn)一步的修訂。原文:匠心打造canvas簽名組件 導(dǎo)讀 6月又是項(xiàng)目吃緊的時(shí)候,一大波需求襲來(lái),猝不及防。 度過(guò)了漫長(zhǎng)而煎熬的6月,是時(shí)候總結(jié)一波。最近移...
摘要:在繼續(xù)深入了解之前,首先要了解一些關(guān)于數(shù)字簽名的基本概念,關(guān)于這些基本概念,阮一峰的這篇博客已經(jīng)做了非常好的解釋,可以先移步一看。 在繼續(xù)深入了解之前,首先要了解一些關(guān)于數(shù)字簽名的基本概念,關(guān)于這些基本概念,阮一峰的這篇博客已經(jīng)做了非常好的解釋,可以先移步一看。 如果用 A 來(lái)表示文章中的鮑勃,B 來(lái)表示蘇珊,Z 來(lái)表示道格,那么文章最后的所描述的情況可以用下圖來(lái)表示: showImg...
摘要:路由守衛(wèi)內(nèi)觸發(fā)更新簽名獲取真實(shí)有效微信簽名此處需要自行處理在路由守衛(wèi)內(nèi)更新簽名,保證是使用當(dāng)前頁(yè)面,是使用目標(biāo)路由完整地址再加上域名使用簽名調(diào)用在使用的頁(yè)面通過(guò)取出緩存的微信簽名,然后進(jìn)行簽名。 背景 手機(jī)型號(hào): 型號(hào):iphone 7 / iphone xs max版本:ios 10.3.1 / ios 12.1微信版本:WeChat 6.7.3 問(wèn)題還原: Vue應(yīng)用(vue-ro...
閱讀 2896·2023-04-25 18:58
閱讀 1011·2021-11-25 09:43
閱讀 1241·2021-10-25 09:46
閱讀 3527·2021-09-09 11:40
閱讀 1744·2021-08-05 09:59
閱讀 893·2019-08-29 15:07
閱讀 981·2019-08-29 12:48
閱讀 730·2019-08-29 11:19