IOS证书分析

最近碰到IOS打包迁移开发环境的问题,整理了一下中间的一些细节和技术。

AppID & BundleID


当需要创建一个新的App的时候,会提示需要先创建AppID

  • Explicit App ID : 一个对应一个App
  • Wildcard App ID : 通配符AppID。根据格式可以匹配多个应用AppID

公钥私钥加密、数字签名


对称加密和非对称加密

苹果的证书中使用大量的非对称加密技术和数字签名技术。

对称加密 : 发送方和接收方使用同样的私钥,在发送时候使用使用公钥加密,接受的使用私钥进行解密
非对称加密 :发送发使用接收方的公钥加密,接收方使用自己的私钥解密

image_1bnqshprc189g1pq38sg1prv10m720.png-17.9kB

摘要算法、数字签名

摘要算法对数据进行计算,得出数据的识别码(摘要)。常见的MD5或者SHA算法都属于摘要算法的范围。算法得出来的值不可逆,而且几乎可以认为是数据的唯一识别码的(在极少数的情况下,不同数据会得出相同的摘要)。
数字签名是对数据进行摘要算法处理,然后用私钥对摘要进行加密。

image_1bnqsilrgb8b15071luj1neg1c9d2d.png-37.2kB

苹果打包流程


下边这个图是申请各个证书的流程

image_1bnqsc8nu1bef1fcq2jb1s132ilp.png-79.5kB

1) 在KeyChain中向CA申请证书

向苹果申请证书后,KeyChain中自动添加公钥私钥,同时生成.cerSigningRequest(csr)文件

.certSigningRequest
一段在SSL认证过程提交给CA的加密文本。一般情况下由认证服务器生成的,包含证书中的一些信息。诸如组织名,常用名(域名),地址,国家,邮箱地址等信息。
证书中的公钥也会包含在内。私钥在创建CSR的同时被创建。
CSR文件通常根据 PKCS #10规范用ASN.1加密。CA会用CSR来创建你的SSL认证,但是它不会需要你的密钥。你需要自己保存你的密钥,这个CSR创建的认证只能和对应的密钥一起使用。所以如果你丢失了密钥,认证就会失效。

2) 生成.cer证书

上传.cerSigningRequestMC(Member Center)
开发者证书包括开发证书(Development Certificates)和发布证书(Production Certificates)
苹果的Push Notifications需要额外的SSL证书
.cer中包含证书中的信息,公钥,苹果公钥

3) 生成provisioning profile

image_1bnqsfkqc10hm1jh57161d8b1l3n16.png-38.7kB

Provisioning Profile中包含

  1. AppID
  2. 使用哪些证书
  3. 功能授权列表
  4. 可安装设备的UUID列表
  5. 苹果的签名。签名是苹果的,所以和我们的私钥没有关系。这意味着,这个文件只能从MC下载,我们不能随意修改。

4) xcode使用Provisioning Profile和私钥进行签名

这个过程中,xcode会使用Provisioning Profile
image_1bno5h1umni0ov61qm11mn1unn9.png-122.6kB

xcode有自动签名的功能。会使用我们的私钥对应用的所有文件framework进行签名。
然后再把他们压缩成ipa格式。就是我们最后的应用包啦。
根据证书的不同,可以发布到AppStore和Ad-hoc上。

5) 生成.p12文件

在团队开发的时候,我们只要在一台机器上设置好以上所有步骤。再导出.p12文件,导入到其他设备中,就可以轻松搭建环境啦。

.p12(在windows平台下为.pfx)相当于.cer + 私钥,同时包含公钥和私钥。在导出的时候需要额外的密码对数据进行额外的加密。

6) IOS验证APP安全

IOS系统内部嵌入了整套证书验证,在启动的时候大抵会验证一下这几步:

  1. 对embedded.mobileprovision进行验证。
    • 通过文件内的签名,使用苹果公钥验证mobileprovision文件本身有没有被修改
    • 验证AppID
    • 验证证书种类和证书,比如开发证书和发布证书
    • 验证设备ID
  2. 使用_CodeSignature/CodeResources对所有文件的签名,对所有文件进行验证

如果我们要对App进行重签名,就需要在MC上创建一个新的证书,provision文件。替换掉embedded.mobileprovision文件,用新的证书对所有文件进行签名,在对framework进行签名,最后再压缩ipa文件

推荐阅读


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值