解析:xcode怎么运行到手机上的?(苹果主要保证app安装时它认证的,并且是他有安装到指定的设备上,在app线上是没有这些描述文件)
第一步: mac电脑上要生成一对公钥M和私钥M (公钥是从私钥生成),CSR文件(包含公钥M,可以直接cat CSR文件看下面)(CSR文件包含信息看下面)中(也就是 钥匙串访问/证书助理/从证书颁发机构请求证书.. (CertificateSigningRequest.certSigningRequest))发给苹果服务器申请证书
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
-----BEGIN CERTIFICATE REQUEST----- MIICfTCCAWUCAQAwODEbMBkGCSqGSIb3DQEJARYMZDh0dkAxNjMuY29tMQwwCgYD VQQDDANtYWMxCzAJBgNVBAYTAkNOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAvx0xqkl0D7zdfFqViDKEpxgftqq0yN/HTmG8Go5w/qgNDOBOoZrCpFAI KwKzhaKt04JO3z/4B6F3CKcSCJ0OPCef3iBYQrfc+I5ONwTrg00X/knExThtbNvV 21iN1rAEoES3r7WEb+x+vbH+IBJVJtpBUraSlOlBhmKVmORNZq/7KA4X4gOC4cno hauCwEneWl7B+vN//VuAno9Yt8xvusumOL8Gwtyzi77fGiYVj+C9e8aSRGyZBSoO DfoM/XErcWYYsIPCVW0mrYSSxiyuk+qvA7HAQfIW4H57GUc9gd2bIjR3L8GZxjhN 6+TrFKH5aVJWDfDbfKG2cQHFSKy8dwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEB AKefLgEFYZALY8qjwAqwnN7hrLAKMYiVSwyWe9pp77EiB2UUV4Vb3PZ6GE+4 cjvCr6nus7gztjYYtSjn7wXK1AaE6+q1oxsP9EElz9k6RtqgTMmwFs7AUkGmsDuD HcwXtxGC8a0MWgAGmuQ12NvQvZCjKf62LJxCXI1GAaLprpuabHyCyNCjXfXdm0+e eNy9gAMSa2EmmBGKy8U1dncOW/nynPL4LxNu+Hk8X0MXSUSaNzOusIkzsIHsPEF/ EWmpmWTcuD30nbL7m0H62J4= -----END CERTIFICATE REQUEST----- |
通过 命令获得
1 |
openssl asn1parse -i -in CertificateSigningRequest.certSigningRequest |
CSR信息如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
0:d=0 hl=4 l= 637 cons: SEQUENCE 4:d=1 hl=4 l= 357 cons: SEQUENCE 8:d=2 hl=2 l= 1 prim: INTEGER :00 11:d=2 hl=2 l= 56 cons: SEQUENCE 13:d=3 hl=2 l= 27 cons: SET 15:d=4 hl=2 l= 25 cons: SEQUENCE 17:d=5 hl=2 l= 9 prim: OBJECT :emailAddress 28:d=5 hl=2 l= 12 prim: IA5STRING :d8tv@163.com 42:d=3 hl=2 l= 12 cons: SET 44:d=4 hl=2 l= 10 cons: SEQUENCE 46:d=5 hl=2 l= 3 prim: OBJECT :commonName 51:d=5 hl=2 l= 3 prim: UTF8STRING :mac 56:d=3 hl=2 l= 11 cons: SET 58:d=4 hl=2 l= 9 cons: SEQUENCE 60:d=5 hl=2 l= 3 prim: OBJECT :countryName 65:d=5 hl=2 l= 2 prim: PRINTABLESTRING :CN 69:d=2 hl=4 l= 290 cons: SEQUENCE 73:d=3 hl=2 l= 13 cons: SEQUENCE 75:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption 86:d=4 hl=2 l= 0 prim: NULL 88:d=3 hl=4 l= 271 prim: BIT STRING 363:d=2 hl=2 l= 0 cons: cont [ 0 ] 365:d=1 hl=2 l= 13 cons: SEQUENCE 367:d=2 hl=2 l= 9 prim: OBJECT :sha256WithRSAEncryption 378:d=2 hl=2 l= 0 prim: NULL 380:d=1 hl=4 l= 257 prim: BIT STRING |
第二步: 苹果用私钥S加密公钥M去生成证书一个证书和一个Provision profile文件,下载到本地,然后mac上会把私钥M和证书关联到一起(验证是否公私钥对应)也就是钥匙串中情况看图
比如如果别的mac也要编译app安装,要把私钥打成p12给他。其中证书包含mac上的公钥M和公钥M的hash值(防止篡改)
另外还有个Provision profile文件是注册的devices和cers等看图 ,可以通过这个路径找到(包含多个系统会进行匹配获取)
1 |
~/Library/MobileDevice/Provisioning Profiles |
可以通过命令得到描述文件的信息(是xml文件可以在xcode的plist查看,也就是下面图的内容):
1 |
security cms -D -i embe.mobileprovision |
第三步: 通过私钥M进行app加密签名和第2步的证书和Provision profile文件打包到app中
问题:怎么验证Provision profile文件加入到app中?
解压app后得到其中有个embedded.mobileprovision就是第2步下载的描述文件,可以对比看下
第四步: 取出第3步的证书通过公钥A(苹果内置)进行解密得到公钥M(验证Hash值是否合法),然后通过公钥M解密app签名判断app是否被修改过,在手机上2次签名认证
问题:怎么签名证书在app中?
看上面解压app后的图 其中有个_CodeSignature/CodeResources这个就是,不止是app包中有,在macho可执行文件中也包含看图(通过machoView查看)