筆記-iOS 簽名機制

寫這篇文章的開頭是因爲一個同事問了我一個問題,

他說如果iOS證書過期了,我們debug包就打不開了,那麼appstore下載的包會怎麼樣呢?

關於證書的概念好像只有:從鑰匙串生成CSR文件、上傳到apple開發者中心、然後下一步、下一步、select...然後直接生成下載,過期了就重新配一下,感覺都知道又好像只知道這樣的一個過程,直到翻了翻資料(李明傑底層原理(上)),才把證書、描述文件、簽名...這些徹底弄明白了,如果你和我一樣,只知道一個配置,那建議還是看一看這篇文章。

來源:底層原理(上)
學習路線
加密解密 -> 單項散列函數 -> 數字簽名 -> 證書 -> iOS簽名機制


一、關於加密

根據密碼的類型分類:對稱加密非對稱加密

  • 對稱加密:加密、解密使用相同的密鑰
  • 非對稱加密:加密、解密使用不同的密鑰(公鑰、私鑰),也被稱爲公鑰加密
  • 對稱加密優缺點
優點:加密、解密速度快

缺點:不能很好地解決密鑰配送問題
  • 非對稱加密特點、優缺點
特點
- 加密密鑰:一般是公開的,因此該密鑰稱爲公鑰
- 解密密鑰:由消息接收者自己保管,不能公開,因此稱爲私鑰
- 公鑰、私鑰是一一對應的,不能單獨生成

優點:能解決密鑰配送問題

缺點:加密、解密速度慢

密鑰配送
- 由消息的接受者,生成一對公鑰、私鑰
- 將公鑰發給消息的發送者
- 消息的發送者使用公鑰加密消息
  • 混合加密
- 將 ‘對稱加密’ 和 ‘非對稱加密’ 的優勢相結合

優點
- 解決了 ‘非對稱加密’ 速度慢的問題
- 通過 ‘非對稱加密’ 解決了 ‘對稱加密’ 的密鑰配送問題

說白了就是
- 用 ‘對稱加密’ 對傳輸數據進行加密;
- 用 ‘非對稱加密’ 對 ‘對稱加密’ 的密鑰進行加密。

二、單向散列函數

單向散列函數,又被稱爲消息摘要函數(message digest function),哈希函數

  • 特點及作用
特點
- 根據任意長度的消息,計算出固定長度的散列值
- 計算速度快
- 消息不同,散列值也不同
- 具備單向性

作用:防止數據被篡改✨✨✨✨✨

說白了,就是不管對多長的內容進行計算,都能得到相同位數的一串數字,例:

MD5 ("123")                            = 202cb962ac59075b964b07152d234b70
MD5 ("123456789012345678901234567890") = a46857f0ecc21f0a06ea434b94d9cf1d

tips:可直接在Mac終端查看,使用該命令。
- md5 -s "xxxx"
  • 常見的幾種單向散列函數
MD5、SHA-1、SHA-2、SHA-3等

三、數字簽名(注意:這裏與數字證書區別對待)

  • 消息發送者產生,別人無法僞造的一段數字串;(用私鑰加密消息的散列值,生成的結果)
  • 同時也是對信息的發送者發送信息真實性的一個有效證明
如何能保證這個簽名是消息發送者自己籤的?
- 用消息發送者的私鑰進行簽名

如果有人篡改了文件內容或者簽名內容,會是什麼結果?
- 簽名驗證失敗,證明內容會篡改

數字簽名不能保證機密性?
- 數字簽名的作用不是爲了保證機密性,僅僅是爲了能夠識別內容有沒有被篡改


數字簽名的作用
- 確認消息的完整性
- 識別消息是否被篡改
- 防止消息發送人否認


數字簽名無法解決的問題:中間人攻擊,如果遭遇了中間人攻擊,那麼
- 公鑰將是僞造的
- 數字簽名將失效

四、證書

利用CA的私鑰,對其他人的公鑰生成數字簽名

作用:解決中間人攻擊(避免公鑰被攔截)✨✨✨

- 密碼學中的證書,全稱叫公鑰證書(Public-key Certificate,PKC),跟駕駛證類似
- 裏面有姓名、郵箱等個人信息,以及此人的公鑰✨✨✨
- 並由認證機構(Certificate Authority,CA)施加數字簽名✨✨✨

證書主要內容:個人信息、公鑰、權威機構的數字簽名

用自己的話說:
就是CA用自己的私鑰對你的公鑰進行認證,其他人用CA的公鑰簽名的合法性

五、iOS簽名機制

作用:保證安裝到手機上的App都是經過Apple官方允許的

蘋果充當了CA機構

不管是真機調試,還是發佈APP,開發者都需要經過一系列複雜的步驟
- 生成CertificateSigningRequest.certSigningRequest文件
- 獲得ios_development.cer\ios_distribution.cer證書文件
- 註冊device、添加App ID
- 獲得*.mobileprovision文件

對於真機調試,現在的Xcode已經自動幫開發者做了以上操作

思考
每一步的作用是什麼?
.certSigningRequest、.cer、.mobileprovision文件究竟裏面包含了什麼?有何用處?
  • 如果從AppStroe下載的,裏面沒有mobileprovision文件,只有 I 和 VII
解釋
1、Mac設備的公鑰
- 從鑰匙串生成CSR文件,就是生成公鑰的過程

2、生成證書
- 把公鑰(CSR文件)上傳到Apple後臺
- 利用Apple後臺的私鑰,對Mac設備的公鑰進行簽名後的證書文件

3、mobileprovision描述文件生成
- 選擇app id
- 選擇devices

六、重簽名

  • 查看codesign用法
man codesign
  • 重簽名步驟
1、準備一個embedded.mobileprovision文件(必須是付費產生的,aphid、device一定要匹配),並放入app中
- 可以通過Xcode自動生成,然後在編譯後的App包中找到
- 可以去開發者證書網站下載

2、從embedded.mobileprovision文件中提取出embedded.plist權限文件
- security cms -D -I embedded.mobileprovision > temp.plist
- /usr/libexec/PlistBuddy -x -c 'Print :Entitlement' temp.plist > embedded.plist

3、查看可用的證書(可以看到證書ID)
- security find-identity -v -p codesigning

4、對.app內部的動態庫、AppExtension進行簽名
- codesign -fs 證書ID xxx.dylib

5、對.app包進行簽名
- codesign -fs 證書ID --entitlements entitlements.plist xxx.app
  • 過程
1、當前app的devices中不包含設備b
2、重新生成一個embedded.mobileprovision,包含設備b,
3、用步驟二中的embedded.mobileprovision替換步驟一種的embedded.mobileprovision

5、將文件夾壓縮,修改類型爲.ipa類型

重簽名GUI工具

參考文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章