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