iOS應(yīng)用簽名原理--數(shù)字簽名捞烟?代碼簽名?雙層代碼簽名当船?

應(yīng)用簽名

數(shù)字簽名

數(shù)字簽名(又稱(chēng)公鑰數(shù)字簽名题画、電子簽章等)是一種類(lèi)似寫(xiě)在紙上的普通的物理簽名,但是使用了公鑰加密領(lǐng)域的技術(shù)實(shí)現(xiàn)德频,用于鑒別數(shù)字信息的方法苍息。一套數(shù)字簽名通常定義兩種互補(bǔ)的運(yùn)算,一個(gè)用于簽名壹置,另一個(gè)用于驗(yàn)證竞思。
數(shù)字簽名,就是只有信息的發(fā)送者才能產(chǎn)生的別人無(wú)法偽造的一段數(shù)字串钞护,這段數(shù)字串同時(shí)也是對(duì)信息的發(fā)送者發(fā)送信息真實(shí)性的一個(gè)有效證明盖喷。

數(shù)字簽名技術(shù)是將摘要信息用發(fā)送者的私鑰加密,與原文一起傳送給接收者难咕。接收者只有用發(fā)送者的公鑰才能解密被加密的摘要信息课梳,然后用Hash函數(shù)對(duì)收到的原文產(chǎn)生一個(gè)摘要信息,與解密的摘要信息對(duì)比余佃。如果相同暮刃,則說(shuō)明收到的信息是完整的,在傳輸過(guò)程中沒(méi)有被修改爆土,否則說(shuō)明信息被修改過(guò)椭懊,因此數(shù)字簽名能夠驗(yàn)證信息的完整性。

舉個(gè)例子:移動(dòng)客戶端向服務(wù)器發(fā)送數(shù)據(jù)

客戶端發(fā)送數(shù)據(jù)

如果不做任何處理步势,可能會(huì)遭到中間人的竊取攻擊氧猬,后果如何嚴(yán)重就不說(shuō)了。那么我們?nèi)绾畏乐怪虚g人攔截坏瘩,或者檢查數(shù)據(jù)是否被篡改呢盅抚?
直接用RSA(RSA加密原理)進(jìn)行加密應(yīng)該是不滿足我們的需求,RSA只適合對(duì)小數(shù)據(jù)進(jìn)行加密桑腮,我們知道驗(yàn)證數(shù)據(jù)的完整性可以用Hash(Hash概述)來(lái)驗(yàn)證泉哈,可以對(duì)數(shù)據(jù)進(jìn)行Hash,把Hash值和原始數(shù)據(jù)一起打包發(fā)送給服務(wù)器破讨,服務(wù)器將原始數(shù)據(jù)進(jìn)行Hash,得到的hash值和客戶端發(fā)送的Hash值做對(duì)比奕纫,如果一致則保證數(shù)據(jù)有效性提陶。但是這樣會(huì)有安全隱患,如果中間人篡改了客戶端發(fā)送的數(shù)據(jù)匹层,當(dāng)然也可以修改客戶端發(fā)送的Hash值隙笆,所以這樣操作不可行锌蓄。

這時(shí)我們可以用RSA來(lái)對(duì)hash值進(jìn)行保護(hù),此時(shí)客戶端發(fā)送原始數(shù)據(jù)撑柔,和經(jīng)RSA加密后的該數(shù)據(jù)的hash值瘸爽。

數(shù)字簽名

服務(wù)器對(duì)RSA加密的數(shù)據(jù)進(jìn)行解密,得到原始數(shù)據(jù)的hash值铅忿,接下來(lái)對(duì)原始數(shù)據(jù)進(jìn)行通過(guò)同樣的Hash算法剪决,將得到的Hash值和解密后的Hash值做對(duì)比,如果一致則保證數(shù)據(jù)有效性檀训,整個(gè)過(guò)程中柑潦,如果解密的Hash值和原始的Hash值不一致,或者無(wú)法解密RSA的數(shù)據(jù)峻凫,說(shuō)明數(shù)據(jù)被篡改了渗鬼。

3.jpg

現(xiàn)在我們解決了服務(wù)端收到客戶端發(fā)送數(shù)據(jù)的有效性,此時(shí)我們稱(chēng)荧琼,對(duì)原始數(shù)據(jù)Hash值進(jìn)行RSA加密后的數(shù)據(jù)譬胎,是原始數(shù)據(jù)的數(shù)字簽名。簡(jiǎn)單解釋數(shù)字簽名也就是對(duì)原始數(shù)據(jù)的Hash值進(jìn)行非對(duì)稱(chēng)加密命锄。

代碼簽名

代碼簽名是對(duì)可執(zhí)行文件或腳本進(jìn)行數(shù)字簽名银择,用來(lái)標(biāo)識(shí)軟件來(lái)源以及軟件開(kāi)發(fā)者的真實(shí)身份,確認(rèn)軟件在簽名后未被修改或損壞的措施累舷。和數(shù)字簽名原來(lái)一樣浩考,只不過(guò)簽名的數(shù)據(jù)是代碼而已。

蘋(píng)果也是通過(guò)代碼簽名來(lái)保證每一個(gè)安裝到iOS上的APP都是經(jīng)過(guò)蘋(píng)果官方允許的被盈,防止盜版軟件析孽、病毒入侵、靜默安裝等。如果想要實(shí)現(xiàn)驗(yàn)證侈咕,最簡(jiǎn)單的方式就是通過(guò)蘋(píng)果官方生成非對(duì)稱(chēng)加密的一對(duì)公私鑰霍衫,在iOS系統(tǒng)中內(nèi)置一個(gè)與服務(wù)器對(duì)應(yīng)的公鑰,私鑰由蘋(píng)果后臺(tái)來(lái)保存邓尤,我們傳APP到App Store時(shí),蘋(píng)果后來(lái)用私鑰對(duì)APP數(shù)據(jù)進(jìn)行簽名贴谎,iOS系統(tǒng)下載這個(gè)APP后汞扎,用公鑰驗(yàn)證這個(gè)簽名,如果簽名正確則這個(gè)APP肯定是由蘋(píng)果后臺(tái)認(rèn)證的擅这,并且沒(méi)有被修改或損壞澈魄。

代碼簽名

整個(gè)過(guò)程很簡(jiǎn)單,這樣就保證了蘋(píng)果安裝的每一個(gè)APP都是經(jīng)過(guò)蘋(píng)果官方允許的仲翎。對(duì)于大部分普通用戶而言痹扇,這樣一個(gè)數(shù)字簽名就解決了安全隱患問(wèn)題铛漓,但是實(shí)際上iOS設(shè)備安裝APP并不是只有App Store這一個(gè)渠道,比如對(duì)于我們iOSer來(lái)說(shuō)鲫构,我們?cè)陂_(kāi)發(fā)APP時(shí)還在真機(jī)調(diào)試浓恶,當(dāng)然蘋(píng)果還開(kāi)放了企業(yè)內(nèi)部分發(fā)的渠道,這時(shí)就無(wú)法通過(guò)簡(jiǎn)單的代碼簽名來(lái)滿足這些需求了结笨。

蘋(píng)果為了實(shí)現(xiàn)這些需求包晰,iOS簽名的復(fù)雜度也就開(kāi)始增加了,這樣雙層代碼簽名就出現(xiàn)了禀梳。前提杜窄,我們都知道描述文件,但是描述文件具體是干嘛的呢

描述文件

在真機(jī)調(diào)試時(shí)候算途,都會(huì)有一個(gè)描述文件塞耕,描述文件就是在developer.apple.com創(chuàng)建的,在Xcode中填入AppID后會(huì)代辦創(chuàng)建嘴瓤,Xcode運(yùn)行時(shí)會(huì)打包進(jìn)APP中扫外。為了系統(tǒng)安全,蘋(píng)果除了控制APP濫用問(wèn)題還控制了推送廓脆、iCloud筛谚、調(diào)試器等附加這些權(quán)限,蘋(píng)果把這些權(quán)限開(kāi)關(guān)統(tǒng)一稱(chēng)為Entitlements(授權(quán)文件)停忿。并將這個(gè)文件放在了一個(gè)叫做Provisioning Profile(描述文件)文件中驾讲,描述文件里面就包括權(quán)限、證書(shū)等配置相關(guān)文件席赂。

通常吮铭,描述文件會(huì)保存在~/Library/MobileDevice/Provisioning Profiles/這個(gè)文件中,可以在終端用 security cms -D -i + [名稱(chēng)]命令查看描述文件里面的信息颅停,我們會(huì)發(fā)現(xiàn)谓晌,描述文件是一個(gè)plist文件,下面是個(gè)人描述文件信息演示癞揉,并對(duì)一些信息做出了注釋?zhuān)糠株P(guān)鍵內(nèi)容被隱藏纸肉,Base64(了解Base64編碼解碼)內(nèi)容被刪減

$ security cms -D -i 294b2de0-a877-4f33-9825-9a8***.mobileprovision 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>AppIDName</key>
    <string>com *** </string>
    <key>ApplicationIdentifierPrefix</key>
    <array>
    <string>***GCDB</string>
    </array>
    <key>CreationDate</key>
    <date>2019-03-06T08:54:06Z</date>
    <key>Platform</key>
    <array>
        <string>iOS</string>
    </array>
    <key>IsXcodeManaged</key>
    <true/>
    <key>DeveloperCertificates</key>
    <array>
        <data>***vcNAQELBQAwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTgwNzEwMDIzNsb3BtZW50IENvLixMdGQuMQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO4xNm+/SXHwULul2Am4b+2/a919AfaDSy6Jw+nC3599RNhUlY+/PNTudcsBUsSw53+flAh6dVVGO77lebM1GaveXMLr65l9aZe2a6ewR0QOpSkvoBZBXlRA14WpyfdMbU7VlWutKiFHsuxA4KSQyoagY8GJ3tB5vSlxRtfix0TKtOCMx9v1iYdCztmhmtt5J6GZn8jKszkPgKxMNvm4MD9N/pr7/Z0gX06oywYb3DpS7uQKdffsLZyj05H0HvSg6V4nHZw5HNIf8qd1VjOiI7NGcvsOwltfGmiOhmxQjaESwalgX7vWg7ij8fh9ke1on8veQgptIxutKjLWG9JnJ2LPOeP7w3PJC03Yl89qJ6F0VAyA1+ck1ieimrG0yXkd9z/YWMd/puDoW7SmEQ/WdKyQkyld0iSnkQ90511uOAp0/yDgaaouyUDZlcIjL2/4JzdEJEiRkZEdmw63uYe4dwXSyTyLlA+ntka2QlKEiJmy8oyPTqjEuqcWWQmnFYWiEBqPaeEXlXT9uuGjqn9aN3MaTgD8QFIyOhonc6ReQHtx8apXGEzhVNAQXCLuKSB04JiCbL3YE2XT42QlygBL+7ROxC00pAIltrPkFfuoyBbpnj9pWQ==</data>
        <data>***GVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTgwNTI1MTMxMjA4WhcNMTkwNTI1MTMxMjA4WjCBrjEaMBgGCgmSJomT8ixkAQEMCjVFVE45NEpBNlUxMTAvBgNVBAMMKGlQaG9uZSBEZXZlbG9wZXI6IFhpbiBDaGVuZyAoNEU4Mk5RVzZDMikxEzARBgNVBAsMClpFV0pNSEdDREIxOzA5BgNVBAoMMlNoYW5naGFpIFJpc2VuIEVsZWN0cmljIFBvd2VyIERldmVsb3BtZW50IENvMDYGCCsGAQUFBwIBFipodHRwOi8dEU39NyqZsQBCA/P1txkkx9sI7JsMcMnjwa/N5QCg+gJLvMEh1ZvQ/rroTtyvDxFuuMrQkiZeeBGs8qBO2Jre6ma32mMo5kSjc9w9AtnFwlQHrW3+HPwwqlThRrMeNvbLZAvZhoENb04HE26sH4k1tk8CrNvutsjl+K3GGnuvWCnZy/dT57wrGAMrlkQZRWXomSxr9y+F4ArsMj+4UsA==</data>
        <data>***sZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTgwNTEzMDQ1OTQ0WhcNMTkwNTEzMDQ1OTQ0WjCBrjEaMBgGCgmSJomT8ixkAQEMCjVFVE45NEpBNlUxMTAvBgNVBAMMKGlQaG9uZSBEZXZlbG9wZXI6IFhpbiBDaGVuZyAoNEU4Mk5RVzZDMikxEzARBgNVBAsMClpFV0pNSEdDREIxOzA5BgNVBAoMMlNoYW5naGFpIFJpc2VuIEVsZWN0cmljIFBByYWN0aWNlIHN0YXRlbWVudHMuMDYGCCsGAQUFBwIBFipodHRwOi8vd3d3LmFwcGxlLmNvbS9jZXJ0aWZpY2F0ZWF1dGhvcml0eS8wFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwMwHQYzizUHwwrgDSFxwfGfc71fr4hz3PmN6o7XqtGcNO4Af49JdDMZv6VQ5mr/plPBSDdun0D5ZfNDr9cXopDCzy+XPZB/H1ARmy1MT4vuKvdsGuUKBvJX/HinDi38G6AuwZ0alfPY9xqJ7WB7K14kaVdaaqOHMThOA7b7b1Stu+MjAKYJ6aUkrf9vvDbDAkQFi8lfh4L3Vya9MoXEpDpCNxQrUJhc6sy2eMf1NT5Q==</data>
        <data>***zA5BgNVBAoMMlNoYW5naGFpIFJpc2VuIEVsZWN0cmljIFBvd2VyIERldmVsb3BtZW50IENvLixMdGQuMQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKIWs9nQdTq3yqKLYVmjrGrgh6MhaWlkZb5MeHWKwGfky3/n/FaXmrLNxFFFWeFihdg4zmFjSjRl8ccvPF3afdZU2qW4Co1aKu459CnPhknFNbFtcrs0V1T6u6p3RJn6togsWn1z33IakruJPYtwY7k4S5jb20vb2NzcDAzLXd3ZHIwMTCCAR0GA1UdIASCARQwggEQMIIBDAYJKoZIhvdjZAUBMIH+MIHDBggrBgEFBQcCAjCBtgyBs1JlbGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0YW5jZSBvZiB0aGUgdGVAFqGwKrYTc+8/GyszOm3u4/mn5s5b58ORnITE+A9bNtDGv6Qz46ev3ZMCrQZFwye//Tk+BI7ms4++jkj/pcmUCULtZw178cTRBpMT4P7tzgH5mRP/BpcSd/rv8994UXYPYdpXa4epFhchlCvu8dT8sQ38fFeahyd85nS30c4RxyW32bzKnzzRSedr/j4Y1qIIvzKdWPcnwkA5RYH8naxYfzEXL2321tdwfR5skvApeP/S2oX9WC+18XBk8Yy693rJoqrKdwkOzQSVGcA==</data>
        <data>***3NjZOMlBGS00xMzAxBgNVBAMMKmlQaG9uZSBEZXZlbG9wZXI6IEhhb3lhbmcgWmh1IChLTU5VVTI4QlBaKTETMBEGA1UECwwKWkVXSk1IR0NEQjE7MDkGA1UECgwyU2hhbmdoYWkgUmlzZW4gRWxlY3RyaWMgUG93ZXIgRGV2ZWxvcG1lbnQgQ28uLEx0ZC4xCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA19bNzMNJ0uSYvwNygYH8b4GQY11UmNvbS9vY3NwMDMtd3dkcjAxMIIBHQYDVR0gBIIBFDCCARAwggEMBgkqhkiG92NkBQEwgf4wgcMGCY2QGAQIBAf8EAgUAMA0GCSqGSIb3DQEBCwUAA4IBAQCJw3MoEbhJNVyc1PFG6FtY7QZAy+gmqRz9YiwnFh3y5Qj5lnC2n0WdG8SrlZA+TKQgfwRZNEB6ZIfDZOJAFsqpBMAauC1V0CDzP8UWBDfluoVCU89Ns5juag8ffk/ulEQfEN1NakgiSwihy+QEmd2PWBTn4dfGVSV9mYRjPppFdM6kik1WLgMDZfLRmNzZ0MzMZMAPy8gdMmQiM7uBY1v+EnUXfyjKnK7Y28AB9c6oQHPoTGmVQxZjJgkejyOlBPWwVPbNvvzNRPuBaHI8muX2HzjsA9SJowEBXKICinqLSFZ8NDQVBrw2fgDs5MD5vaDHXtrz9t6Ahw6/7nUB240U</data>
        <data>***LDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTgwOTI1MDIxMzA4WhcNMTkwOTI1MDIxMzA4WjCBrzEaMBgGCgmSJomT8ixkAQEMCjIzVDNTWlo0WjQxMjAwBgNVBAMMKWlQaG9uZSBEZXZlbG9wZXI6IOS9s+a7qCDnjosgKDN1UdDgQWBBT7im/bw3RlTv0soM/RVB2mmh9e4zAOBgNVHQ8BAf8EBAMCB4AwEwYKKoZIhvdjZAYBAgEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBACErmsYfmt/qn5yj86poEkDsDWhznabHVn1CJprtzyHbXNcbKJE1pY99ACzSUVW9iGaxXJ9m5dWmZsd+2gxOBthFDq4mSpU50OHQgg9AjjugvsQ+OH1r1qgqcJMPdLN4stJtkAC9Mb/rt3AYA5eEdHOXbhrsE3TXWmWfJzYS9PFyarGcJ9xFAWg76jTtFA6nlzYtl/YyMDS6Z075oMzKG/pRfCI13P4AqRKdx/DBtz4x0Wv59LVMVrXa4bfePLKMBJrBFdiiyCy4k4BIx4weG/Y/8OsEkmWkN0fDWmi4MZjy3I+FCNkv9tUzI/vRvDEiNR7qo5rGRKnAi+X1QbdLYcU=</data>
        <data>***o0WjQxMjAwBgNVBAMMKWlQaG9uZSBEZXZlbG9wZXI6IOS9s+a7qCDnjosgKDNYTDJNRFdWOUcpMRMwEQYDVQQLDApaRVdKTUhHQ0RCMTswOQYDVQQKDDJTaGFuZ2hhaSBSaXNlbiBFbGVjdHJpYyBQb3dlciBEZXZlbG9wbWVudCBDby4sTHRkLjELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC35nKt/AoSiANJn9e9H96rol/85zSEAjAAMB8GA1UdIwQYMBaAFIgnFwmpthhgi+zruvZHWcVSVKO3MD8GCCsGAQUFBwEBBDMwMTAvBggr1UdJQEB/wQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBSIeBiIaX4EyW39H2laObRLnSyWVjAOBgNVHQ8BAf8EBAMCB4AwEwYKKoZIhvdjZAYBAgEB/wQCyETSZ/FOr8EBZBVLmMGXz03x6f2Hpd7QsmoJJM5+6hHu4qgstgXNg0RRsa0B4jScKTMlRxmdZuLjm3plaX+P+yo0ylAnvGWm1sx9mxPTgrDbUg7Rg0n1bhrBtkX47+r8SUz4+E6dHnqZ7x48hZlhv6SFkj4PQ/apeAvITvnLeq7bj586gkpwS30bjmrsqSO8aEnysvyxq6Xx3+seH9Uihmjb7XdnV25mKfbf5ms6sm+HrN6ifrDb0LePX8YAsSH4=</data>
    </array>


    <key>Entitlements</key>      // 權(quán)限
    <dict>
        <key>keychain-access-groups</key>
        <array>
            <string> *** .*</string>        
        </array>
        <key>get-task-allow</key>    // APP是否允許調(diào)試
        <true/>
        <key>application-identifier</key>    // appID
        <string> *** </string>
        <key>com.apple.developer.associated-domains</key>
        <string>*</string>
        <key>com.apple.developer.team-identifier</key>
        <string> *** </string>
        <key>aps-environment</key>
        <string>development</string>

    </dict>
    <key>ExpirationDate</key>    // 過(guò)期時(shí)間
    <date>2020-03-05T08:54:06Z</date>
    <key>Name</key>
    <string>iOS Team Provisioning Profile: *** </string>
    <key>ProvisionedDevices</key>    // 設(shè)備列表
    <array>
        <string>476c21e91700a0605a11a***3de7705a</string>
        <string>98a1263783fb5538ec292f0***9d05690ffb</string>
        <string>bc9144d7496e5337e1f***cb653dc42e</string>
        <string>254fbcad0126f989b8980***d1dd8169b6ca</string>
        <string>349f7aeb300473cc30c28***025d</string>
    </array>
    <key>TeamIdentifier</key>
    <array>
        <string> *** </string>
    </array>
    <key>TeamName</key>
    <string> *** Co.,Ltd.</string>
    <key>TimeToLive</key>
    <integer>365</integer>
    <key>UUID</key>    // 描述文件的UUID
    <string> *** </string>
    <key>Version</key>
    <integer>1</integer>
</dict>

雙層代碼簽名

  • 請(qǐng)求證書(shū)
    開(kāi)發(fā)過(guò)程中,首先Mac電腦(比如Xcode)會(huì)自動(dòng)生成一對(duì)公私鑰
公私鑰

圖中的證書(shū)就是公鑰M喊熟,專(zhuān)用密鑰就是私鑰M(也就是我們導(dǎo)出的P12文件)

用一個(gè)CSR文件(就是在鑰匙串訪問(wèn)中柏肪,證書(shū)助理,從證書(shū)頒發(fā)機(jī)構(gòu)中獲取的)向蘋(píng)果申請(qǐng)一個(gè)證書(shū)逊移,這個(gè)CSR文件主要包含了一個(gè)公鑰文件预吆,還有一些信息,比如郵箱胳泉、名字拐叉、簽名信息、Hash值等等扇商,蘋(píng)果收到請(qǐng)求后凤瘦,會(huì)用私鑰A將公鑰M進(jìn)行簽名,以供蘋(píng)果設(shè)備進(jìn)行驗(yàn)證(用公鑰A進(jìn)行驗(yàn)證)案铺。蘋(píng)果服務(wù)器將公鑰M和簽名信息打包成證書(shū)蔬芥,并把a(bǔ)ppID、證書(shū)控汉、設(shè)備IDs笔诵、權(quán)限文件等放入描述文件一并返回給Mac電腦,以備Mac電腦用這個(gè)描述文件中的證書(shū)到iOS設(shè)備去驗(yàn)證姑子。

請(qǐng)求證書(shū)
  • 生成IPA文件乎婿,發(fā)送到iOS設(shè)備上
    iOS設(shè)備上的APP其實(shí)都是文件夾,最重要的是可執(zhí)行文件MachO和framework街佑,APP簽名也就是對(duì)它倆進(jìn)行簽名谢翎,通過(guò)Mac電腦的私鑰M對(duì)文件進(jìn)行簽名,把這個(gè)簽名和從蘋(píng)果申請(qǐng)的描述文件一并放入到APP中沐旨。當(dāng)安裝APP時(shí)森逮,iOS設(shè)備用公鑰A來(lái)解析描述文件中的證書(shū)進(jìn)行驗(yàn)證證書(shū)的有效性,通過(guò)之后將證書(shū)中的公鑰M拿出來(lái)磁携,再去驗(yàn)證APP簽名的有效性褒侧,這樣就可以驗(yàn)證當(dāng)前APP是否是蘋(píng)果官方允許的。
雙層代碼簽名

在開(kāi)發(fā)階段谊迄,我們需要頻繁的改動(dòng)程序跑真機(jī)闷供,蘋(píng)果不需要關(guān)心這些,所以iOS設(shè)備沒(méi)有對(duì)APP的更改進(jìn)行驗(yàn)證鳞上,只是驗(yàn)證證書(shū)(公鑰M是不是合法的这吻,APP簽名的有效性)。這樣解決了安裝問(wèn)題篙议,但是如果這樣的話唾糯,可以在任何一部iOS設(shè)備上安裝APP,蘋(píng)果防止開(kāi)發(fā)者濫用鬼贱,又加了兩個(gè)限制:

  1. 要在蘋(píng)果后臺(tái)注冊(cè)過(guò)的設(shè)備才可以安裝
  2. 簽名只能針對(duì)具體的某一個(gè)APP進(jìn)行簽名

關(guān)于APP簽名

在開(kāi)發(fā)中移怯,編譯一個(gè)APP后,用本地的私鑰M對(duì)APP進(jìn)行簽名这难,同時(shí)把從蘋(píng)果服務(wù)器得到的Provisioning Profile文件打包進(jìn)APP中舟误,文件名為embedded.mobileprovision,把APP安裝到iOS設(shè)備后姻乓,系統(tǒng)進(jìn)行驗(yàn)證嵌溢。

查看資源文件簽名

查看APP的包內(nèi)容眯牧,里面會(huì)有_CodeSignature文件夾(里面的就是資源文件的簽名),還有個(gè)可執(zhí)行文件赖草,可以用MachO查看学少,里面的Code signature就是應(yīng)用簽名。

該文章為記錄本人的學(xué)習(xí)路程秧骑,希望能夠幫助大家版确,也歡迎大家點(diǎn)贊留言交流!:跽邸绒疗!文章地址:http://www.reibang.com/p/4307de384a50

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市骂澄,隨后出現(xiàn)的幾起案子吓蘑,更是在濱河造成了極大的恐慌,老刑警劉巖酗洒,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件士修,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡樱衷,警方通過(guò)查閱死者的電腦和手機(jī)棋嘲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)矩桂,“玉大人沸移,你說(shuō)我怎么就攤上這事≈读瘢” “怎么了雹锣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)癞蚕。 經(jīng)常有香客問(wèn)我蕊爵,道長(zhǎng),這世上最難降的妖魔是什么桦山? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任攒射,我火速辦了婚禮,結(jié)果婚禮上恒水,老公的妹妹穿的比我還像新娘会放。我一直安慰自己,他們只是感情好钉凌,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布咧最。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矢沿。 梳的紋絲不亂的頭發(fā)上滥搭,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音咨察,去河邊找鬼论熙。 笑死福青,一個(gè)胖子當(dāng)著我的面吹牛摄狱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播无午,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼媒役,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了宪迟?” 一聲冷哼從身側(cè)響起酣衷,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎次泽,沒(méi)想到半個(gè)月后穿仪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡意荤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年啊片,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玖像。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡紫谷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捐寥,到底是詐尸還是另有隱情笤昨,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布握恳,位于F島的核電站瞒窒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏乡洼。R本人自食惡果不足惜崇裁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望就珠。 院中可真熱鬧寇壳,春花似錦、人聲如沸妻怎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至匿辩,卻和暖如春腰耙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铲球。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工挺庞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人稼病。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓选侨,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親然走。 傳聞我的和親對(duì)象是個(gè)殘疾皇子援制,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 一 概述 之前我在做iOS項(xiàng)目開(kāi)發(fā)時(shí),由于采用的是自己的開(kāi)發(fā)者賬號(hào)芍瑞,在Xcode的General配置中勾選上Aut...
    YesWeCan閱讀 1,939評(píng)論 0 14
  • iOS 簽名機(jī)制挺復(fù)雜晨仑,各種證書(shū),Provisioning Profile拆檬,entitlements洪己,Certif...
    不忘初心1990閱讀 359評(píng)論 0 1
  • iOS 簽名機(jī)制挺復(fù)雜,各種證書(shū)竟贯,Provisioning Profile答捕,entitlements,Certif...
    iYeso閱讀 922評(píng)論 0 3
  • 轉(zhuǎn)自 bang' blog 有改動(dòng)澄耍。 iOS 簽名機(jī)制挺復(fù)雜噪珊,各種證書(shū),Provisioning Profile...
    就叫yang閱讀 794評(píng)論 0 2
  • 不知道大家有沒(méi)有人和我一樣齐莲,夢(mèng)境里都是像偵探劇一樣痢站,有連貫的劇情,各種各樣的人設(shè)选酗。有時(shí)候是浪漫的偶像劇阵难,有時(shí)候是緊...
    嚴(yán)啊蝶閱讀 199評(píng)論 0 0