iOS證書相關(guān)問題詳解、真機調(diào)試、無線調(diào)試

在開始之前先了解一下相關(guān)知識。
公開密鑰加密:

公開密鑰加密也稱作“非對稱加密”是一種使用不同密鑰進行加密和解密的加密方法,用于加密的密鑰稱為公開密鑰(公鑰),用于解密的密鑰稱為,秘密密鑰(私鑰)。

約定前提:公鑰加密的信息只能由私鑰解密。

  • 接受方B生成一對密鑰,將公鑰公開到互聯(lián)網(wǎng)上,私鑰秘密保存。
  • 發(fā)送方A用B公開的公鑰加密原始信息,然后將秘文發(fā)送給B,B用私鑰解密的到原始信息。

這就解釋了非對稱加密
如果反過來,使用私鑰加密,公鑰解密這就變成了“數(shù)字簽名”

數(shù)字簽名:

非對稱加密過程中公鑰加密私鑰解密?,F(xiàn)在反過來,私鑰加密公鑰解密。由于公鑰是公開的,所以所有人都能通過公鑰解出密文,這樣的加密是毫無意義的。但是從另一種角度來看,你可以看到密文的創(chuàng)建者保證是擁有密鑰的一方,這不就像“簽名”嗎。

在“數(shù)字簽名中”,只有A方可以做的密文可以用作“簽名”。由于信息的加密過程需要時間,為了縮短時間首先找到信息的哈希值(摘要算法),然后加密哈希值并將其用于簽名。

簽名過程:

  • 首先A方準備一對密鑰(公鑰和私鑰)和想要發(fā)送的信息,把私鑰公開或者發(fā)送給接收方B。
  • A方用私鑰加密信息,將信息和加密后的密文一起發(fā)送出去。
  • 接受方B收到信息、公鑰,用公鑰驗證信息得到的密文和收到的密文匹配。由此B可以證實信息的發(fā)送方A發(fā)送,并且沒有被偽造。

這就解釋了數(shù)字簽名。

數(shù)字證書:

數(shù)字簽名提供驗證,偽造檢測和防止否認的功能,但是存在一個問題就是公開密鑰中沒有任何信息表示創(chuàng)建者是誰。這個問題可以通過“數(shù)字證書”系統(tǒng)來解決。

對數(shù)字證書通俗的理解,就像這樣的一張電子證書:
image

數(shù)字證書機制:

  • 首先A方需要要求認證機構(gòu)CA頒發(fā)證書,證明A方是公開密鑰的所有者。認證機構(gòu)是管理數(shù)字證書的組織,像政府或者大公司那樣值得信賴的組織都可以成為管理數(shù)字證書的組織。

  • 認證機構(gòu)CA準備一對密鑰,A方準備好自己的個人信息、公開密鑰、電子郵件等信息,將其發(fā)送給認證機構(gòu),認證機構(gòu)CA用私鑰給A方的相關(guān)信息創(chuàng)建數(shù)字簽名,創(chuàng)建的數(shù)字簽名和數(shù)據(jù)做成單個文件后發(fā)送給A方,該文件之后就是A方的數(shù)字證書。

  • 接下來A將數(shù)字證書代替公鑰發(fā)送給B或者公開。

  • B方收到A方的證書,從中得知證書信息屬于A方。B方驗證數(shù)字證書中的數(shù)字簽名來自認證機構(gòu)CA(證書中的簽名信息只能使用認證機構(gòu)的公開密鑰進行驗證),如果驗證沒問題,就可以確定該數(shù)字證書由認證機構(gòu)CA簽發(fā)。

  • 由于已經(jīng)確認該數(shù)字證書可信,也就可以認為證書中的數(shù)字簽名屬于A方,進而從數(shù)字簽名中提取A方的公開密鑰。

由此,公開密鑰交付完成。

通過數(shù)字證書系統(tǒng),就可以驗證公鑰的所有者。如果證書不受信任,B方?jīng)]理由相信未經(jīng)驗證的公鑰。


iOS 開發(fā)證書相關(guān)問題

對數(shù)字證書系統(tǒng)了解了之后,然后看iOS證書申請過程。
必須條件:

  • 已經(jīng)加入Apple開發(fā)者計劃的apple賬號(交過費的賬號)。
  • MAC系統(tǒng)的電腦(黑蘋果也可以),MAC系統(tǒng)電腦自帶Keychain Access。
  1. 證書請求文件(CSR)文件,證書請求文件

CSR,全稱為:Certificate Signing Request,證書請求文件的縮寫。

為了確保我提供的信息在互聯(lián)網(wǎng)的傳輸過程中不會被有意或者無意的破壞掉,我們有如下的機制來對傳輸?shù)膬?nèi)容進行保護:首先在本地生成一對密鑰(私鑰+公鑰),用私鑰對“我們需要提供的信息“進行加密,從而生成證書請求文件(.csr), 這個證書請求文件其實就是私鑰對應(yīng)的公鑰證書的原始文件,里面含有對應(yīng)的公鑰信息,郵件,...

Mac下的CSR文件從鑰匙串創(chuàng)建方式:官方文檔。創(chuàng)建完成,試著解析出來的的內(nèi)容大致如下:

 域名:xxxx
 組織/公司名稱:xxxx
 部門/單位:xxxx
 國家:CN
 郵箱:name@example.com
 加密強度:2048
 公共密鑰:
 -----BEGIN PUBLIC KEY-----
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA216nTo1ce9tJcuZwkpk1
 2Td9vd0fznXCD22U+AFzzWCMuDWS0vz58DWJt7yWpUlpvn4qR36tLUnvv6gyQNoA
 NE/Uta886j+fslZPna1katPBQ/A0r0M1JeMgVhTaHDDSH7gqF61VsYrJ5hjYR1NG
 +l3bZoXFmSRAEU4SwEwFMduG/RdUdubHfy0/Sh74mty/n/7zRJuccq++30Mf4CIv
 WrJs99rUmzXS9KRjbWM0cI3nNdp8IorZ0FEhY567Kgj4gpvWK3CvU9Tp2oeDmxrW
 57GZnHEposEe1MTXvDrQJI9MzEpyVQ1aWiO6eT0Ro2lP1/YQpbmeWMAECddyvAVY
 OQIDAQAB
 -----END PUBLIC KEY-----
  1. 創(chuàng)建好之后就去apple開發(fā)者中心創(chuàng)建對應(yīng)的證書。最后下載下來創(chuàng)建好的證書,雙擊就自動添加到鑰匙串了。

在 Mac 上的“鑰匙串訪問” 中,選擇一個鑰匙串,然后點按“我的證書”或“證書”類別來查看該鑰匙串中的證書。選擇想要查看的證書,然后點按工具欄中的“簡介”按鈕 。您也可以連按想要查看的證書。

連按查看證書的效果:

 主題名稱:
 用戶ID: com.xxxx.xxxx
 常用名稱:Apple Sandbox Push Services:com.xxxx.xxxx
 組織單位: xxxxxxxx
 國家或地區(qū):CN
 簽發(fā)者名稱:
 常用名稱: Apple Worldwide Developer Relations Certification Authority
 組織單位:G4
 組織: Apple Inc.
 國家或地區(qū):US
 序列號:xxxxxxxxxxxxxxx
 版本:3
 簽名算法:帶RSA加密的SHA-256
 參數(shù):無
 在此之前無效: 2022年3月7日星期一中國標準時間下午3:00:00 
 在此之后無效: 2023年4月6日星期四中國標準時間下午3:00:00
 公共密鑰信息:
 算法 RSA加密
 參數(shù):無
 公共密鑰: 256字節(jié):DB4EA74E8D5C7BBB...
 指數(shù)65537 密鑰大小 2,048位 密鑰使用 加密,驗證,派生
 簽名256字節(jié):5073A02532426E18...
 ......

整個過程其實就是上文數(shù)字證書機制的頒發(fā)證書過程......

  1. 證書創(chuàng)建好了以后,從鑰匙串導(dǎo)出證書格式為.p12文件(此文件建議備份保存)。

到此,iOS證書就創(chuàng)建完成了

  1. Xcode配置證書

安裝好最新版的Xcode>preference>Accounts>點擊+添加你的Apple開發(fā)者賬號>剩下的Xcode會自動配置好

如果有多個開發(fā)者賬號,最好手動在工程里設(shè)置。

  1. 代碼簽名(Code Signing)

(1) 每個證書(開發(fā)/發(fā)布)的公鑰都有對應(yīng)的私鑰,并且保存在鑰匙串(如果沒有你可能已經(jīng)遇到無法真機運行的問題了)。

(2) 私鑰會在真機調(diào)試/打包的時候用來簽名,通常第一次運行Xcode會彈窗提示訪問鑰匙串! 選擇“始終允許”,打包的時候還會把對應(yīng)的描述文件打包進去,描述文件已經(jīng)包含證書相關(guān)信息了。

  1. iOS 系統(tǒng)驗證簽名

(1) App在真機上運行,首先會對app的相關(guān)信息和打包進去的描述文件中包含的app信息對比。

(2) 緊接著iOS系統(tǒng)通過預(yù)裝在iOS系統(tǒng)的受信證書公鑰對描述文件中的相關(guān)證書解密,取得證書公鑰然后對app簽名信息驗證,證明其是否被篡改。

(3) 驗證通過就可以運行了。

其過程就是上文數(shù)字證書機制中的B方驗證A方證書的流程了

其它問題:

  1. 根證書CA

CA(Certificate Authority)被稱為證書授權(quán)中,根證書是CA認證中心給自己頒發(fā)的證書,是信任鏈的起始點。安裝根證書意味著對這個CA認證中心的信任。

受信任證書存儲區(qū)包含預(yù)先安裝在 iOS、iPadOS、macOS、Apple tvOS 和 watchOS 中的受信任根證書。

  1. 授權(quán)文件:(Provisioning Profile) .mobileprovision文件

手動在Apple開發(fā)者中心創(chuàng)建Provisioning Profile文件:

(1) Apple開發(fā)者中心>Certificates, Identifiers & Profiles>Profiles> 點擊+ 新建

(2) 依次選擇App ID(單選)> 證書(Certificates,可多選)和設(shè)備(Devices,可多選)

開發(fā)配置文件包含開發(fā)所必須的所有內(nèi)容(app相關(guān)信息,開發(fā)證書,真機設(shè)備)
發(fā)布授權(quán)文件只包含發(fā)布證書、app相關(guān)信息

查看一個開發(fā)描述文件:

 xxxx_development
 Expires In 11 months
 
 App ID Name: xxxx
 App ID: xxxxxxxx.com.xxxx.xxxx
 Team: xxxxxx., Ltd. (xxxxxxxx)
 Platform: iOS
 UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx
 Creation Date: Mar 12, 2022 at 12:03:24 PM GMT+8
 Expiration Date: Mar 12, 2023 at 12:03:24 PM GMT+8
 
 ENTITLEMENTS
 aps-environment: development
 get-task-allow: true
 com.apple.developer.applesignin: Default
 com.apple.developer.associated-domains: *
 application-identifier: xxxxxxxx.com.xxxx.xxxx
 com.apple.developer.team-identifier: xxxxxxxx
 keychain-access-groups: xxxxxxxx.*, com.apple.token
 
 CERTIFICATES
 Name: Apple Development: xx x (xxxxxxxx)
 Creation Date: Mar 12, 2021 at 12:46:08 AM GMT+8
 Serial Number: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 SHA-1: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
 PROVISIONED DEVICES
 Device ID: xxxxxxxxxxxxxxxxxxxxxx
 ......
  1. p12文件:

P12文件是使用PKCS#12(公鑰密碼標準#12),全稱“Public Key Cryptography Standards #12加密的數(shù)字證書“,用于存儲和傳輸個人私鑰和其他敏感信息的可移植格式。

鑰匙串中帶有密鑰的證書都可以生成.p12文件,其它MAC電腦只要打開這個.p12文件就無需再申請證書,可以直接用來開發(fā)相關(guān)應(yīng)用。

對于開發(fā)證書,生成p12文件之后還要和描述文件(.mobileprovision)一起發(fā)送給其他使用者,才能使用這臺電腦就可以用來打包、真機調(diào)試等了。

  1. apple開發(fā)者賬號

    共三種:個人、公司、企業(yè)。

Xcode 常見問題:

no such provisioning profile was found

描述文件錯誤,需要手動去開發(fā)者中心下載描述文件到本地,或者點擊Fix issue解決。

No identities from profile

Xcode配置指定UDID的provisioning profile中的DeveloperCertificates在本地KeyChain中不存在[No identities are available]或不一致(KeyPair中的Private Key丟失),此時需去網(wǎng)站檢查ProvisioningProfile中的App ID-Certificate-Device配置是否正確?;蛘咴囈辉嘪code提示的Fix issue解決(可能自動生成iOS Team ProvisioningProfile)。

Code Signing Entitlements file do not match profile

檢查對應(yīng)版本(Debug)指定的*.entitlements文件中的“Keychain Access Groups”鍵值是否與ProvisioningProfile中的Entitlements項相吻合,或者將Build Settings|Code Signing的Provisioning Profile中對應(yīng)版本(Debug)的Entitlements置空。

Xcode 真機無線調(diào)試:

前提:

  • 必須能正常連線調(diào)試
  • 手機和電腦連接同一個局域網(wǎng)
  1. 連接設(shè)備,從Xcode中做如下操作:

    Window>Devices and Simulators>你的真機 Connec via network??。 然后斷開手機,你會發(fā)現(xiàn)手機還是保持連接狀態(tài)。

  2. command+R運行后,Xcode會提示iPhone is not connectioned,

    然后去Device and Simulators>左側(cè)選中設(shè)備,右健選擇Connect via IP Address 在彈出的框中輸入手機的IP地址,即可。

可能會遇到的問題:iPhone is busy xxx多試幾次。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容