iOS 开发 code sign 代码签名深入剖析

iOS 开发 code sign 代码签名深入剖析

前言

这里写图片描述
三个模块:

//代码签名授权
Code Signing Entitlements
//代码签名身份
Code Signing Identity
//描述文件/配置文件
Provisioning Profile

1.点击这里—-苹果官网code sign guide

2.代码签名 (code signing) 和配置文件 (provisioning),是做iOS开发绕不过的坎,报错的时候也是很不容易解决的,终究其原因,就是对苹果为iOS开发设置的一整套安全机制理解不到位导致的,平时大家都集中时间处理开发中遇到的需求问题,在这里投入的时间不够,到时出现错误时,不晓得从哪里下手

3.苹果的很多东西都是闭源的,代码签名就是一个难以理解的神秘黑盒,我们无法直接看到代码签名的运作过程,它们隐藏在 iOS 系统内部和 SDK 之中.想要理解code sign的运作,就不得不了解证书和秘钥了

证书( Certificates)和密匙(Keys)

作为一个 iOS 开发者,在你开发使用的机器上应该已经有一个证书,一个公钥,以及一个私钥。这些是代码签名机制的核心

打开–钥匙串—我的证书
这里写图片描述

  1. 可以看到所有你持有的私钥相对应的证书。
  2. 要用一个证书设置代码签名,必须拥有私钥,所以所有拥有私钥的证书都会被列在这里。
  3. 如果拥有一个证书的私钥,可以展开证书并将它的私钥显示出来:
  4. 如果要导出证书,例如为了备份(强烈建议进行),一定要记得展开证书那一条显示出私钥并将两行都选中。且导出后的证书就是.p12格式的文件,做推送时,就是这样的文件

证书/认证机构/有效期

  1. 一个证书是一个公钥加上许多附加信息,这些附加信息都是被某个认证机构(Certificate Authority 简称 CA)进行签名认证过的,认证这个证书中的信息是准确无误的。
  2. 对于 iOS 开发来说这个认证机构就是苹果的认证部门 Apple Worldwide Developer Relations CA。
  3. 认证的签名有固定的有效期,这就意味着当前系统时间需要被正确设置,因为证书是基于当前时间进行核对。这也是为什么将系统时间设定到过去会对 iOS 造成多方面破坏的原因之一。
  4. 对于iOS开发,有两种证书:开发证书(Develope)和发布证书(Distribution).iOS 系统会利用这个信息来判断你的应用是运行在开发模式下还是发布模式,并据此判断以切换应用运行规则

证书/签名/公钥/私钥

  1. 为了让拥有公钥的证书起作用,我们需要有私钥。
  2. 私钥是你在为组成应用的二进制文件进行签名时派上用场的。没有私钥,你就无法用证书和公钥对任何东西设置签名.
  3. 签名过程本身是由命令行工具 codesign 来完成的。
  4. 如果你在 Xcode 中编译一个应用,这个应用构建完成之后会自动调用 codesign 命令进行签名,codesign 也正是给你提供了许多格式友好并且有用错误信息的那一个工具。你可以在 Xcode 的 project settings 中设置代码签名信息。
    这里写图片描述

注意:

  1. Xcode 只允许在有限的选项中进行选择,这些选项都是既拥有公钥也拥有私钥的证书。
  2. 如果在选项中没有出现你想要的那一个,那么你需要检查的第一件事情就是你是否拥有这个证书的私钥。
  3. 在这里需要区分开用于开发测试还是用于发布,如果想要在机器上测试你的应用,你需要用用于开发测试的那一对密匙来进行签名,如果你是要发布应用,无论是给测试人员还是发布到 APP Store,你需要用用于发布的那一对密匙来进行签名。
  4. Xcode 6之后 的 project settings 中出现了设置配置文件(Provisioning Profile)的选项。如果你选择了某一个配置文件,你必须选择这个配置文件的证书中所包含的公钥所对应的那个密匙对,或者你可以选择让 Xcode 自动完成正确的设置

已签名应用–签名信息的查看和修改

  1. 原理理解:一个已签名的可执行文件的签名包含在 Mach-O 二进制文件格式中;对于例如脚本这样的非 Mach-O 可执行文件,就存放在该文件系统的的扩展属性中。这种做法使得在 OS X 和 iOS 上的任何可执行二进制文件都可以被设置签名:不论是动态库,命令行工具,还是 .app 后缀的程序包。这也意味着设置签名的过程实际上会改动可执行文件的文件内容,将签名数据写入二进制文件中。
  2. 如果你拥有一个证书和它的私钥,那么用 codesign 来设置签名非常简单,我们现在尝试用下面列出的这个证书来为 Example.app 设置签名:
$ codesign -s
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值