iOS 开发 Certificate和Code Signing–证书与签名–详解

1.Certificate-证书

iOS 开发 证书–根证书/申请证书/开发(发布)证书–详解

2.Code Signing-签名

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

每个证书(其实是公钥)对应 Key Pair 中的私钥会被用来对内容(executable code,resources such as images and nib files aren’t signed)进行数字签名(CodeSign)——使用哈希算法生成内容摘要(digest)。

Xcode 使用指定证书配套的私钥进行签名时需要授权,选择【始终允许】后,以后使用该私钥进行签名便不会再弹出授权确认窗口。

3.Code Signing Identity-官方图解

Xcode 中配置的 Code Signing Identity(entitlements、certificate)必须与 Provisioning Profile 匹配,并且配置的 Certificate 必须在本机 Keychain Access 中存在对应 Public/Private Key Pair,否则编译会报错。

Xcode 所在的 Mac 设备(系统)使用 CA 证书(WWDRCA.cer)来判断 Code Signing Identity 中 Certificate 的合法性:

  • 若用 WWDRCA 公钥能成功解密出证书并得到公钥(Public Key)和内容摘要(Signature),证明此证书确乃 AppleWWDRCA 颁布,即证书来源可信;
  • 再对证书本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此证书未被篡改过,即证书完整。

4.Verify Code Signature with Certificate-证书验证签名

公钥被包含在数字证书里,数字证书又被包含在描述文件(Provisioning File)中,描述文件在应用被安装的时候会被拷贝到 iOS 设备中。

  • App 在 Mac/iOS 真机上启动时,需要对配置的 bundle ID、entitlements 和 certificate 与 Provisioning Profile 进行匹配校验:

  • iOS/Mac 真机上的 ios_development.cer 被 AppleWWDRCA.cer 中的 public key 解密校验合法后,获取每个开发证书中可信任的公钥对 App 的可靠性和完整性进行校验。

iOS/Mac 设备(系统)使用 App Provisioning Profile(Code Signing Identity)中的开发证书来判断App的合法性:

  • 若用证书公钥能成功解密出 App(executable bundle)的内容摘要(_CodeSignature),证明此 App 确乃认证开发者发布,即来源可信;
  • 再对 App(executable bundle)本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此 App 未被篡改过,即内容完整。

总结

  • 基于 Provisioning Profile 校验了 CodeSign 的一致性;
  • 基于 Certificate 校验 App 的可靠性和完整性;
  • 启动时,真机的 device ID(UUID)必须在 Provisioning - Profile 的 ProvisionedDevices 授权之列。
  • 无论是 Xcode 对 APP 进行签名打包还是真机运行 APP 进行校验,都使用了基于证书体系的非对称加密机制。

iOS 开发 Certificate和Code Signing--证书与签名--详解相关推荐

  1. iOS开发——使用Charles进行https网络抓包详解

    我在前面两篇博客中<网络抓包工具Charles的介绍与使用><iOS开发--使用Charles进行http网络抓包详解>对Charles的http抓包进行了详细的讲解.今天我们 ...

  2. iOS开发——使用Charles进行http网络抓包详解

    我在之前一篇博客<网络抓包工具Charles的介绍与使用>中简单介绍了Charles的安装破解,以及进行简单的Charles抓包配置的介绍.今天我们来详细介绍下使用Charles进行htt ...

  3. 【iOS 开发】Objective-C 入门 Xcode 环境详解

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38424965 一. Xcode 环境安装 与 工程创建 1. ...

  4. 跨平台应用开发进阶(四十一)使用Xcode打包 iOS 应用 archive 时四种证书的区别详解

    文章目录 一.archive 四种模式 二.相同点 三.安装方式区别 四.iOS开发者账号(企业版)申请攻略 4.1 苹果开发者账号类型 4.2 企业版开发者账号的优势是什么? 4.3 企业版开发者账 ...

  5. ios开发愤怒的小鸟的Lua语言:Wax框架详解(一)

    核心提示:我们都知道Objective-C和Cocoa语言可以开发iOS应用,但是一年前,苹果决定在iOS系统上使用Lua语言.Wax框架的想法很简单:凡是Objective-C能做的,Lua也能做! ...

  6. iOS开发之模仿简书App自定义TabBar详解

    先来看看效果图吧 然后我们再来一步一步看看代码 1.首先页面下面TabBar的Button需要自定义,把Button的文字放在图片下面 //更换文字图片的位置,最主要的就是实现以下两个方法,重写父类方 ...

  7. iOS开发——加载、滑动翻阅大量图片解决方案详解

    目录(?)[-] 常规思路流程 使用低分辨率图 多线程任务 优化快速翻阅体验 最后还一个砍儿 加载.滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的 ...

  8. iOS开发——加载、滑动翻阅大量图片解决方案详解 .

    加载.滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的是,编程思想无关乎平台限制. 我要详细说一下,在缩略图界面点击任意小缩略图后,进入高清大图全屏 ...

  9. iOS Provisioning Profile(Certificate)与Code Signing详解

    引言 关于开发证书配置(Certificates & Identifiers & Provisioning Profiles),相信做 iOS 开发的同学没少被折腾.对于一个 iOS ...

最新文章

  1. 用C#开发较完整的Windows任务管理器
  2. hdu 2141 Can you find it? hdu1597 find the nth digit
  3. linux基本命令du,Linux常用操作命令汇总
  4. sockaddr类型重定义
  5. Linux Ubuntu 安装 anaconda3和 Pycharm 社区版本
  6. 数据库PowerDesigner创建图表(模块表分类)
  7. Linux命令基本格式(详解版)
  8. .NET进行客户端Web开发又一利器 - Ant Design Blazor
  9. Flutter中State深入分析理解
  10. CentOS7.X安装Redis-4.0.8以及Redis集群搭建
  11. 开源:Taurus.MVC 框架 (已支持.NET Core)
  12. linux 集群服务器设置,Zookeeper集群配置
  13. dat关闭某进程_电脑程序卡住怎么办?结束进程只需要这三个键
  14. 步进电机驱动电路设计精华_电动机控制电路图讲解
  15. 地理入门-经纬度时区速成总结篇(转)
  16. 模式识别谱聚类matlab,基因表达谱聚类分析
  17. SQL Server各版本
  18. 什么是Windows驱动程序?
  19. 【一步步学OpenGL 27】 -《公告牌技术与几何着色器》
  20. 考研350什么水平计算机,考研350分的难度相当于高考考什么水平?很多人都不知道...

热门文章

  1. Datax自定义Transformer数据清洗(使用本地加载local_storage解耦合)
  2. 电脑播放视频的时候有杂音
  3. C51单片机LED显示二进制【核心代码详解】
  4. 如何获取全国各省市区的地理区域位置(地图-JSON-点位-行政区域)
  5. 电子计算机女生就业方向,计算机专业的女生就业方向有哪些
  6. 文本自动换行样式word-break: break-all
  7. 国外安全网站、社区论坛、博客、公司、在线工具等整合收集
  8. .net core 3.1简体中文语言包,英文智能提示变成中文!
  9. 如何在 IIS 中添加 MIME 类型
  10. java计算机毕业设计基于ssm的汽车租赁出租系统(源代码+数据库+Lw文档)