在開始之前先了解一下相關(guān)知識(shí)密末。
公開密鑰加密:
公開密鑰加密也稱作“非對(duì)稱加密”是一種使用不同密鑰進(jìn)行加密和解密的加密方法握爷,用于加密的密鑰稱為公開密鑰(公鑰),用于解密的密鑰稱為,秘密密鑰(私鑰)严里。
約定前提:公鑰加密的信息只能由私鑰解密新啼。
- 接受方B生成一對(duì)密鑰,將公鑰公開到互聯(lián)網(wǎng)上刹碾,私鑰秘密保存燥撞。
- 發(fā)送方A用B公開的公鑰加密原始信息,然后將秘文發(fā)送給B迷帜,B用私鑰解密的到原始信息物舒。
這就解釋了非對(duì)稱加密
如果反過來,使用私鑰加密戏锹,公鑰解密這就變成了“數(shù)字簽名”
數(shù)字簽名:
非對(duì)稱加密過程中公鑰加密私鑰解密」诳瑁現(xiàn)在反過來,私鑰加密公鑰解密锦针。由于公鑰是公開的荠察,所以所有人都能通過公鑰解出密文,這樣的加密是毫無意義的奈搜。但是從另一種角度來看悉盆,你可以看到密文的創(chuàng)建者保證是擁有密鑰的一方,這不就像“簽名”嗎媚污。
在“數(shù)字簽名中”舀瓢,只有A方可以做的密文可以用作“簽名”。由于信息的加密過程需要時(shí)間耗美,為了縮短時(shí)間首先找到信息的哈希值(摘要算法)京髓,然后加密哈希值并將其用于簽名。
簽名過程:
- 首先A方準(zhǔn)備一對(duì)密鑰(公鑰和私鑰)和想要發(fā)送的信息商架,把私鑰公開或者發(fā)送給接收方B堰怨。
- A方用私鑰加密信息,將信息和加密后的密文一起發(fā)送出去蛇摸。
- 接受方B收到信息备图、公鑰,用公鑰驗(yàn)證信息得到的密文和收到的密文匹配赶袄。由此B可以證實(shí)信息的發(fā)送方A發(fā)送揽涮,并且沒有被偽造。
這就解釋了數(shù)字簽名饿肺。
數(shù)字證書:
數(shù)字簽名提供驗(yàn)證蒋困,偽造檢測和防止否認(rèn)的功能,但是存在一個(gè)問題就是公開密鑰中沒有任何信息表示創(chuàng)建者是誰敬辣。這個(gè)問題可以通過“數(shù)字證書”系統(tǒng)來解決雪标。
對(duì)數(shù)字證書通俗的理解零院,就像這樣的一張電子證書:數(shù)字證書機(jī)制:
首先A方需要要求認(rèn)證機(jī)構(gòu)CA頒發(fā)證書,證明A方是公開密鑰的所有者村刨。認(rèn)證機(jī)構(gòu)是管理數(shù)字證書的組織告抄,像政府或者大公司那樣值得信賴的組織都可以成為管理數(shù)字證書的組織。
認(rèn)證機(jī)構(gòu)CA準(zhǔn)備一對(duì)密鑰嵌牺,A方準(zhǔn)備好自己的個(gè)人信息打洼、公開密鑰、電子郵件等信息髓梅,將其發(fā)送給認(rèn)證機(jī)構(gòu)拟蜻,認(rèn)證機(jī)構(gòu)CA用私鑰給A方的相關(guān)信息創(chuàng)建數(shù)字簽名,創(chuàng)建的數(shù)字簽名和數(shù)據(jù)做成單個(gè)文件后發(fā)送給A方枯饿,該文件之后就是A方的數(shù)字證書。
接下來A將數(shù)字證書代替公鑰發(fā)送給B或者公開诡必。
B方收到A方的證書奢方,從中得知證書信息屬于A方。B方驗(yàn)證數(shù)字證書中的數(shù)字簽名來自認(rèn)證機(jī)構(gòu)CA(證書中的簽名信息只能使用認(rèn)證機(jī)構(gòu)的公開密鑰進(jìn)行驗(yàn)證)爸舒,如果驗(yàn)證沒問題蟋字,就可以確定該數(shù)字證書由認(rèn)證機(jī)構(gòu)CA簽發(fā)。
由于已經(jīng)確認(rèn)該數(shù)字證書可信扭勉,也就可以認(rèn)為證書中的數(shù)字簽名屬于A方鹊奖,進(jìn)而從數(shù)字簽名中提取A方的公開密鑰。
由此涂炎,公開密鑰交付完成忠聚。
通過數(shù)字證書系統(tǒng),就可以驗(yàn)證公鑰的所有者唱捣。如果證書不受信任两蟀,B方?jīng)]理由相信未經(jīng)驗(yàn)證的公鑰。
iOS 開發(fā)證書相關(guān)問題
對(duì)數(shù)字證書系統(tǒng)了解了之后震缭,然后看iOS證書申請(qǐng)過程赂毯。
必須條件:
- 已經(jīng)加入Apple開發(fā)者計(jì)劃的apple賬號(hào)(交過費(fèi)的賬號(hào))。
- MAC系統(tǒng)的電腦(黑蘋果也可以)拣宰,MAC系統(tǒng)電腦自帶Keychain Access党涕。
- 證書請(qǐng)求文件(CSR)文件,證書請(qǐng)求文件
CSR巡社,全稱為:Certificate Signing Request膛堤,證書請(qǐng)求文件的縮寫。
為了確保我提供的信息在互聯(lián)網(wǎng)的傳輸過程中不會(huì)被有意或者無意的破壞掉重贺,我們有如下的機(jī)制來對(duì)傳輸?shù)膬?nèi)容進(jìn)行保護(hù):首先在本地生成一對(duì)密鑰(私鑰+公鑰)骑祟,用私鑰對(duì)“我們需要提供的信息“進(jìn)行加密回懦,從而生成證書請(qǐng)求文件(.csr), 這個(gè)證書請(qǐng)求文件其實(shí)就是私鑰對(duì)應(yīng)的公鑰證書的原始文件,里面含有對(duì)應(yīng)的公鑰信息,郵件,...
Mac下的CSR文件從鑰匙串創(chuàng)建方式:官方文檔次企。創(chuàng)建完成怯晕,試著解析出來的的內(nèi)容大致如下:
域名:xxxx
組織/公司名稱:xxxx
部門/單位:xxxx
國家:CN
郵箱:name@example.com
加密強(qiáng)度:2048
公共密鑰:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA216nTo1ce9tJcuZwkpk1
2Td9vd0fznXCD22U+AFzzWCMuDWS0vz58DWJt7yWpUlpvn4qR36tLUnvv6gyQNoA
NE/Uta886j+fslZPna1katPBQ/A0r0M1JeMgVhTaHDDSH7gqF61VsYrJ5hjYR1NG
+l3bZoXFmSRAEU4SwEwFMduG/RdUdubHfy0/Sh74mty/n/7zRJuccq++30Mf4CIv
WrJs99rUmzXS9KRjbWM0cI3nNdp8IorZ0FEhY567Kgj4gpvWK3CvU9Tp2oeDmxrW
57GZnHEposEe1MTXvDrQJI9MzEpyVQ1aWiO6eT0Ro2lP1/YQpbmeWMAECddyvAVY
OQIDAQAB
-----END PUBLIC KEY-----
- 創(chuàng)建好之后就去apple開發(fā)者中心創(chuàng)建對(duì)應(yīng)的證書。最后下載下來創(chuàng)建好的證書缸棵,雙擊就自動(dòng)添加到鑰匙串了舟茶。
在 Mac 上的“鑰匙串訪問” 中,選擇一個(gè)鑰匙串堵第,然后點(diǎn)按“我的證書”或“證書”類別來查看該鑰匙串中的證書吧凉。選擇想要查看的證書,然后點(diǎn)按工具欄中的“簡介”按鈕 踏志。您也可以連按想要查看的證書阀捅。
連按查看證書的效果:
主題名稱:
用戶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
序列號(hào):xxxxxxxxxxxxxxx
版本:3
簽名算法:帶RSA加密的SHA-256
參數(shù):無
在此之前無效: 2022年3月7日星期一中國標(biāo)準(zhǔn)時(shí)間下午3:00:00
在此之后無效: 2023年4月6日星期四中國標(biāo)準(zhǔn)時(shí)間下午3:00:00
公共密鑰信息:
算法 RSA加密
參數(shù):無
公共密鑰: 256字節(jié):DB4EA74E8D5C7BBB...
指數(shù)65537 密鑰大小 2,048位 密鑰使用 加密,驗(yàn)證针余,派生
簽名256字節(jié):5073A02532426E18...
......
整個(gè)過程其實(shí)就是上文數(shù)字證書機(jī)制的頒發(fā)證書過程......
- 證書創(chuàng)建好了以后饲鄙,從鑰匙串導(dǎo)出證書格式為.p12文件(此文件建議備份保存)。
到此圆雁,iOS證書就創(chuàng)建完成了
- Xcode配置證書
安裝好最新版的Xcode>preference>Accounts>點(diǎn)擊+添加你的Apple開發(fā)者賬號(hào)>剩下的Xcode會(huì)自動(dòng)配置好
如果有多個(gè)開發(fā)者賬號(hào),最好手動(dòng)在工程里設(shè)置忍级。
- 代碼簽名(Code Signing)
(1) 每個(gè)證書(開發(fā)/發(fā)布)的公鑰都有對(duì)應(yīng)的私鑰,并且保存在鑰匙串(如果沒有你可能已經(jīng)遇到無法真機(jī)運(yùn)行的問題了)伪朽。
(2) 私鑰會(huì)在真機(jī)調(diào)試/打包的時(shí)候用來簽名,通常第一次運(yùn)行Xcode會(huì)彈窗提示訪問鑰匙串! 選擇“始終允許”轴咱,打包的時(shí)候還會(huì)把對(duì)應(yīng)的描述文件打包進(jìn)去,描述文件已經(jīng)包含證書相關(guān)信息了。
- iOS 系統(tǒng)驗(yàn)證簽名
(1) App在真機(jī)上運(yùn)行,首先會(huì)對(duì)app的相關(guān)信息和打包進(jìn)去的描述文件中包含的app信息對(duì)比烈涮。
(2) 緊接著iOS系統(tǒng)通過預(yù)裝在iOS系統(tǒng)的受信證書公鑰對(duì)描述文件中的相關(guān)證書解密朴肺,取得證書公鑰然后對(duì)app簽名信息驗(yàn)證,證明其是否被篡改跃脊。
(3) 驗(yàn)證通過就可以運(yùn)行了宇挫。
其過程就是上文數(shù)字證書機(jī)制中的B方驗(yàn)證A方證書的流程了
其它問題:
- 根證書CA
CA(Certificate Authority)被稱為證書授權(quán)中,根證書是CA認(rèn)證中心給自己頒發(fā)的證書酪术,是信任鏈的起始點(diǎn)器瘪。安裝根證書意味著對(duì)這個(gè)CA認(rèn)證中心的信任。
受信任證書存儲(chǔ)區(qū)包含預(yù)先安裝在 iOS绘雁、iPadOS橡疼、macOS、Apple tvOS 和 watchOS 中的受信任根證書庐舟。
- 授權(quán)文件:(Provisioning Profile) .mobileprovision文件
手動(dòng)在Apple開發(fā)者中心創(chuàng)建Provisioning Profile文件:
(1) Apple開發(fā)者中心>Certificates, Identifiers & Profiles>Profiles> 點(diǎn)擊+ 新建
(2) 依次選擇App ID(單選)> 證書(Certificates欣除,可多選)和設(shè)備(Devices,可多選)
開發(fā)配置文件包含開發(fā)所必須的所有內(nèi)容(app相關(guān)信息挪略,開發(fā)證書历帚,真機(jī)設(shè)備)
發(fā)布授權(quán)文件只包含發(fā)布證書滔岳、app相關(guān)信息
查看一個(gè)開發(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
......
- p12文件:
P12文件是使用PKCS#12(公鑰密碼標(biāo)準(zhǔn)#12),全稱“Public Key Cryptography Standards #12加密的數(shù)字證書“挽牢,用于存儲(chǔ)和傳輸個(gè)人私鑰和其他敏感信息的可移植格式谱煤。
鑰匙串中帶有密鑰的證書都可以生成.p12文件,其它MAC電腦只要打開這個(gè).p12文件就無需再申請(qǐng)證書禽拔,可以直接用來開發(fā)相關(guān)應(yīng)用刘离。
對(duì)于開發(fā)證書,生成p12文件之后還要和描述文件(.mobileprovision)一起發(fā)送給其他使用者睹栖,才能使用這臺(tái)電腦就可以用來打包硫惕、真機(jī)調(diào)試等了。
-
apple開發(fā)者賬號(hào)
共三種:個(gè)人野来、公司恼除、企業(yè)。
Xcode 常見問題:
no such provisioning profile was found
描述文件錯(cuò)誤梁只,需要手動(dòng)去開發(fā)者中心下載描述文件到本地缚柳,或者點(diǎn)擊Fix issue解決。
No identities from profile
Xcode配置指定UDID的provisioning profile中的DeveloperCertificates在本地KeyChain中不存在[No identities are available]或不一致(KeyPair中的Private Key丟失)搪锣,此時(shí)需去網(wǎng)站檢查ProvisioningProfile中的App ID-Certificate-Device配置是否正確〔势或者試一試Xcode提示的Fix issue解決(可能自動(dòng)生成iOS Team ProvisioningProfile)构舟。
Code Signing Entitlements file do not match profile
檢查對(duì)應(yīng)版本(Debug)指定的*.entitlements文件中的“Keychain Access Groups”鍵值是否與ProvisioningProfile中的Entitlements項(xiàng)相吻合,或者將Build Settings|Code Signing的Provisioning Profile中對(duì)應(yīng)版本(Debug)的Entitlements置空堵幽。
Xcode 真機(jī)無線調(diào)試:
前提:
- 必須能正常連線調(diào)試
- 手機(jī)和電腦連接同一個(gè)局域網(wǎng)
-
連接設(shè)備,從Xcode中做如下操作:
Window>Devices and Simulators>你的真機(jī) Connec via network??狗超。 然后斷開手機(jī),你會(huì)發(fā)現(xiàn)手機(jī)還是保持連接狀態(tài)朴下。
-
command+R運(yùn)行后努咐,Xcode會(huì)提示
iPhone is not connectioned
,然后去Device and Simulators>左側(cè)選中設(shè)備,右健選擇Connect via IP Address 在彈出的框中輸入手機(jī)的IP地址殴胧,即可渗稍。
可能會(huì)遇到的問題:iPhone is busy xxx
多試幾次。