美文网首页
了解iOS 应用签名

了解iOS 应用签名

作者: jayhe | 来源:发表于2020-06-03 21:28 被阅读0次

我们知道苹果的签名验证采用的是双重非对称加密验证
mac电脑有一对公钥、私钥(p12),这里我们标记为“公钥M”、“私钥M”
苹果服务器和iOS设备分别对应有一对私钥、公钥,这里我们标记为“公钥A”、“私钥A”

证书-cers

  • 可以通过''钥匙串"去向证书颁发机构申请
image

此时会得到一个CertificateSigningRequest.certSigningRequest文件,我们将其简称为CSR文件

  • CSR文件都包含了哪些信息了?

openssl asn1parse -i -in CertificateSigningRequest.certSigningRequest

在终端通过openssl指令可以看到信息如下:


0:d=0  hl=4 l= 645 cons: SEQUENCE         

    4:d=1  hl=4 l= 365 cons:  SEQUENCE         

    8:d=2  hl=2 l=  1 prim:  INTEGER          :00

  11:d=2  hl=2 l=  64 cons:  SEQUENCE         

  13:d=3  hl=2 l=  32 cons:    SET             

  15:d=4  hl=2 l=  30 cons:    SEQUENCE         

  17:d=5  hl=2 l=  9 prim:      OBJECT            :emailAddress

  28:d=5  hl=2 l=  17 prim:      IA5STRING        :1054134542@qq.com

  47:d=3  hl=2 l=  15 cons:    SET             

  49:d=4  hl=2 l=  13 cons:    SEQUENCE         

  51:d=5  hl=2 l=  3 prim:      OBJECT            :commonName

  56:d=5  hl=2 l=  6 prim:      UTF8STRING        :贺超

  64:d=3  hl=2 l=  11 cons:    SET             

  66:d=4  hl=2 l=  9 cons:    SEQUENCE         

  68:d=5  hl=2 l=  3 prim:      OBJECT            :countryName

  73:d=5  hl=2 l=  2 prim:      PRINTABLESTRING  :CN

  77:d=2  hl=4 l= 290 cons:  SEQUENCE         

  81:d=3  hl=2 l=  13 cons:    SEQUENCE         

  83:d=4  hl=2 l=  9 prim:    OBJECT            :rsaEncryption

  94:d=4  hl=2 l=  0 prim:    NULL             

  96:d=3  hl=4 l= 271 prim:    BIT STRING       

  371:d=2  hl=2 l=  0 cons:  cont [ 0 ]       

  373:d=1  hl=2 l=  13 cons:  SEQUENCE         

  375:d=2  hl=2 l=  9 prim:  OBJECT            :sha256WithRSAEncryption

  386:d=2  hl=2 l=  0 prim:  NULL             

  388:d=1  hl=4 l= 257 prim:  BIT STRING   

这里我们将申请的信息以及“公钥M”一起打包发给苹果服务器,苹果服务器使用“私钥A”对信息进行加密,然后生成证书;这个证书则可以通过手机的“公钥A”进行解密

  • 查看证书的信息

openssl x509 -text -in xxx.cer -out xxx.text

xxx.cer为证书的名称,xxx.text输出的文件名

唯一标识符-Identifiers

iOS设备安装应用时用来识别不同App的唯一标识;应用分身就是用不同的Identifier然后重签名ipa包安装到手机上

描述文件

.cer文件只是声明了证书的类型,比如Apple Development、Apple Distribution、APNs推送等等,而使用什么证书打包及证书的有效期、AppID是什么、打包的App包含了哪些功能、可以在哪些设备上安装,则是通过Provisioning Profile 描述文件(.mobileprovision后缀)来说明的,苹果后台将所有这些信息组合后再使用Apple私钥进行签名,最后生成Provisioning Profile描述文件

我们Mac电脑中的描述文件存放在:~/Library/MobileDevice/Provisioning\ Profiles目录中,我们查看下描述文件都包含哪些信息,终端执行以下命令

security cms -Di xxx.mobileprovision


<?xml version="1.0" encoding="UTF-8"?>

<!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>XC hc RuntimeLearning</string>

<key>ApplicationIdentifierPrefix</key>

<array>

<string>L2ZY2L7GYS</string>

</array>

<key>CreationDate</key>

<date>2020-05-30T09:41:36Z</date>

<key>Platform</key>

<array>

<string>iOS</string>

</array>

<key>IsXcodeManaged</key>

<true/>

<key>DeveloperCertificates</key>

<array>

<data>加密的内容</data>

<data>加密的内容</data>

</array>

<key>Entitlements</key>

<dict>

<key>application-identifier</key>

<string>L2ZY2L7GYS.hc.RuntimeLearning</string>

<key>keychain-access-groups</key>

<array>

<string>L2ZY2L7GYS.*</string>

</array>

<key>get-task-allow</key>

<true/>

<key>com.apple.developer.team-identifier</key>

<string>L2ZY2L7GYS</string>

<key>com.apple.security.application-groups</key>

<array>

<string>group.hc.demo</string>

</array>

</dict>

<key>ExpirationDate</key>

<date>2020-06-06T09:41:36Z</date>

<key>Name</key>

<string>iOS Team Provisioning Profile: hc.RuntimeLearning</string>

<key>ProvisionedDevices</key>

<array>

<string>2e9d3a0d88ccbf9deb2efa12ea042187ef3d0ada</string>

<string>00008020-00182C413A90003A</string>

</array>

<key>LocalProvision</key>

<true/>

<key>TeamIdentifier</key>

<array>

<string>L2ZY2L7GYS</string>

</array>

<key>TeamName</key>

<string>chao he</string>

<key>TimeToLive</key>

<integer>7</integer>

<key>UUID</key>

<string>46ae42b4-6862-4d4b-9890-cc0fdf42eca2</string>

<key>Version</key>

<integer>1</integer>

</dict>

</plist>

这里推荐一个在mac下查看描述文件的插件[ProvisionQL](https://github.com/ealeksandrov/ProvisionQL),直接选择描述文件按空格就能看到详细信息

权限文件-entitlements

App使用到的各种权限(APNs、HealthKit、iCloud等),也是需要Apple验证通过后才能生效的,Apple将这些权限开关统一称为Entitlements。当第一次在Xcode中勾选权限时,项目中会自动生成一个.entitlements后缀的文件,里面记录了App所拥有的权限。

AppStore签名

1. 电脑端使用证书对应的私钥p12对可执行文件MachO、资源、以及Frameworks、Plugins等进行签名打包成ipa包
2. 上传ipa包到苹果服务器
3. 苹果服务器使用私钥A对app数据进行加密签名
4. 用户通过AppStore下载包之后使用手机中的公钥A进行解密验证,验证通过后安装成功

步骤1中的操作都是由Xcode帮我们完成,签名的过程也是帮我们处理了,可以在Xcode的日志中看到

非AppStore渠道分发

  • 开发中连接设备到Xcode进行真机调试安装

  • AD-Hoc内部测试安装,需要先获取设备UDID并注册(Xcode11之后可以直接设备连接到Xcode Register Device去注册),并且有最多100台设备的限制

  • In-House企业内部分发,安装设备数量无限制,但安装后需主动在设置中选择信任证书

1. 电脑端使用证书对应的私钥p12对可执行文件MachO、资源、以及Frameworks、Plugins等进行签名打包成ipa包
2. 打包的过程中会将描述文件Provisioning Profile命名为embedded.mobileprovision放入到打包app中
3. 手机端安装或者启动,使用内置的公钥A验证embedded.mobileprovision是否有效设备是否在安装列表,同时验证证书签名是否有效,这包括证书的有效期(个人的调试证书有效期7天)同时取出证书中的公钥M
4. 由于app的签名是用私钥M签名的,手机拿到公钥M可以对app进行签名校验,包括AppID是否对应、权限开关是否跟app里的entitlements一致等等

相关文章

  • 了解iOS 应用签名

    我们知道苹果的签名验证采用的是双重非对称加密验证mac电脑有一对公钥、私钥(p12),这里我们标记为“公钥M”、“...

  • IOS 逆向开发(四)App重签名

    1. 应用签名 应用签名原理回顾 上一篇博客“IOS 逆向开发(三)应用签名”中详细讲解了IOS 应用签名,证书的...

  • 10 - 应用签名原理和重签名实操

    iOS应用签名 什么是iOS应用签名? 在iOS出来之前,主流的操作系统(MacOS/Windows)软件随便从哪...

  • iOS中的App安全-应用签名和重签名

    探讨iOS应用签名之前,首先我们需要了解一个东西,叫做数字签名。 数字签名 名词解释:为什么用签名这个词,因为老外...

  • iOS开发逆向之应用重签名(上)

    本文主要介绍重签名的几种方式,以及如何对应用进行重签名, 应用重签名 从之前《iOS逆向应用签名》中可知,签名是指...

  • iOS应用签名原理

    在讨论关于iOS应用签名之前,我们需要先了解一个东西,叫做数字签名 数字签名 名词解释:因为老外喜欢用支票,支票上...

  • iOS应用签名(上)

    关于iOS应用签名我想一起探讨一下它的原理.首先我们需要了解一个东西,叫做数字签名 数字签名(digitally ...

  • iOS应用重签名技术

    了解了iOS应用签名之后,发现苹果就是通过签名来验证我们的证书能否能签名我们的App,那我们能不能用我们的证书对别...

  • iOS应用签名(上)

    关于iOS应用签名我想一起探讨一下它的原理.首先我们需要了解一个东西,叫做数字签名 数字签名(digitally ...

  • iOS签名机制

    应用签名的原理iOS APP签名机制详解iOS逆向之旅(基础篇) — App的签名机制【Xcode是如何将App安...

网友评论

      本文标题:了解iOS 应用签名

      本文链接:https://www.haomeiwen.com/subject/ubdizhtx.html