文档章节

iOS批量自动打包和部署(I):苹果的证书知多少?

hejunbinlan
 hejunbinlan
发布于 2016/07/29 17:46
字数 1673
阅读 94
收藏 3

如果你遇到这样的一项需求:项目的代码没有变动,只是icon和接口改动,然后要打成很多的包,发往AppleStore。就像喜马拉雅的各种小版本那样,像牛皮鲜一样污染在AppleStore之上。那么问题来了,成十上百的包,仅仅只是icon的图标变了,代码都一样,难道要人工在那打成十上百次吗?答案当然是否定的,不想着把工作变简单的程序员不是好程序员。

带着上面的问题,脑子里孕育了这个系列的文章。希望通过这个系列的文章,能加深一下对加密,苹果的证书,自动打包,代码签名,重新签名等的了解,文章出现任何错误,欢迎指正。

本篇主要涉及对一些基本概念的理解,后续的文章将会有Demo和最终的脚本,如果想直接用脚本,请稍后。

对称加密(symmetric cryptography)和非对称加密(asymmetric cryptography)

先从对称加密和非对称加密讲起。

  • 对称加密:加密和解密用的是同一个秘钥
  • 非对称加密:加密和解密是不同的钥匙

客户端(Client)和服务器(Server)进行通讯,Client和Server约定好相同的一把秘钥,Client发送的明文通过这把秘钥进行加密,Server在收到这段加密后的密文后通过事先约定好的那边秘钥进行解密得到明文。理论上只要保证秘钥不被泄露就可以保证安全,但是实际上这种方式很不安全,如果秘钥被破解,又恰好服务器只用了这一个秘钥(这可能是最糟糕的情况),那么服务器和其他的客户端之间的通讯基本上就是完全暴露了。这个例子说的是对称加密。
对称加密

还有一种情况,比上面的想法更加出色一点。每个端都生成一个“私钥-公钥”对,私钥是自己保管,公钥可以随便分享,用公钥可以解开私钥,用私钥可以解开公钥。例如服务端生成了一个“私钥-公钥”对,自己保留了一份私钥,把公钥给客户端,客户端对发送的消息通过公钥进行加密,服务端在收到这个公钥后用自己的私钥进行解密还原得到明文。

非对称加密

常见的对称加密有:DES,AES等 常见的非对称加密有:SSL,HTTPS,TLS,RSA。 秘钥长度越长破解的难度越大。我在iOS持久化数据时用过AES,其他的没有用过。非对称加密中RSA是很有名,被应用的很广泛的数字证书。

数字签名和数字证书

看下面的一个场景:

A生成了一对“私钥-公钥”,然后把公钥给了B,B用公钥加密一段消息,发给A,A收到消息后用私钥解密,接着A用私钥加密一段文字给B,B收到后用公钥解密查看明文。如此反复。

上面是一个非对称加密聊天的具体场景,虽然经典,但是还是有一些问题。

1.A在收到B的信息的时候不能保证B发的信息是最原始的,即传输的内容有可能被篡改
2.黑客C获取了B的公钥,然后伪装成B和A进行通信

上面的情况都是可能出现的,现在这样,A为了保证数据不被改动,先对数据用hash函数生成一个摘要(digest),然后用私钥对这个摘要进行加密,生成了“数字签名”(signature),B在收到这个消息时先用公钥对摘要进行解密得到摘要并且对数据内容也进行一次hash,比较这次的hash是否与之前解密得到的摘要一致,如果一致,说明数据没有被改动。我们把对内容数据进行hash后再加密生成的一段内容称为“数字签名”。

黑客C进行伪装交流的可能性也是有的,为了解决这个办法,A去找了一个权威的“证书中心”(certificate authority,简称CA),为公钥做验证。CA用自己的私钥对A的公钥和一些相关信息一起加密,生成了“数字证书”(Digital Certificate)。这样A在进行消息传递时也附带上数字证书,B在收到消息时用CA的公钥解开数字证书拿到真实的公钥,通过这样的方式验证身份。

阮一峰的有篇文章很形象的说明了其中的意思:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

在Mac上的钥匙串访问app是专门用来管理证书的。iOS开发者在申请iOS开发证书时,需要通过keychain生成CSR文件(Certificate Signing Request),提交给苹果的Apple Worldwide Developer Relations Certification Authority(WWDR)证书认证中心进行签名,最后从苹果官网下载并安装使用。这个过程中还会产生一个私钥,证书和私钥在keychain中得位置如图:(以下这段摘自这篇文章,因为我发现这个图非常形象)
http://img.objccn.io/issue-17/iphone-developer-keychain.png

iOS系统原本就持有WWDR的公钥,系统首先会对证书内容通过指定的哈希算法计算得到一个信息摘要;然后使用WWDR的公钥对证书中包含的数字签名解密,从而得到经过WWDR的私钥加密过的信息摘要;最后对比两个信息摘要,如果内容相同就说明该证书可信。整个过程如图所示:
http://img.blog.csdn.net/20130603170924312

在验证了证书是可信的以后,iOS系统就可以获取到证书中包含的开发者的公钥,并使用该公钥来判断代码签名的可用性了。

每个iOS的开发者都必需有苹果的证书和秘钥,因为在打完包的最后一个流程就是进行签名,没有这些就无法提交appstore。

objc.io上面有篇《Inside Code Signing》(中文翻译篇:代码签名探析)上详细的讲述了一个已签名应用的组成和一些其他知识,是一篇很不错的学习文章,下篇blog也会在讲打包之前穿插这个代码签名探析里面的知识要点。

本文转载自:http://www.vienta.me/2015/05/27/iOS%E6%89%B9%E9%87%8F%E8%87%AA%E5%8A%A8%E6%89%93%E5%8C%85%E5%92%8...

共有 人打赏支持
hejunbinlan
粉丝 41
博文 586
码字总数 21569
作品 0
浦东
高级程序员
小驴拉磨之自动化打包—fastlane的安装

fastlane 简介 fastlane 是一套工具,帮助你简化和自动化 App 发布或部署的过程,将之变成一条平直的工作流。通过 fastlane,你可以实现 持续分发(CD,一种用于自动化和改进软件分发过程的设...

小驴拉磨
2017/11/17
0
0
Appuploader的安装介绍

注意:下载AU后需安装java8运行环境才能启动;安装好了最新Java8运行环境,解压AU软件包,无需安装,Windows 64位系统点击appuploader.exe启动;如果是Linux/Windows 32位系统或Mac系统双击appuplo...

webmirror
05/11
0
0
iOS证书(.p12)和描述文件(.mobileprovision)申请

iOS有两种证书和描述文件: 证书类型 使用场景 开发(Development)证书和描述文件 用于开发测试,在HBuilder中打包后可在真机环境通过Safari调试 发布(Distribution)证书和描述文件 用于提交A...

-Man
2015/11/19
0
0
iOS实现OTA无线安装App

引用Apple说明: 您可以使用 Apple Developer Enterprise Program(Apple 开发者企> 业级计划)开发 iOS 和 macOS 应用,对于开发、测试应用以及将> > 其分发给用户,此计划提供了完整的流程...

LuisX
08/29
0
0
四种绕过iOS SSL验证和证书锁定的方法

     几个月前,Cody Wass发布了一篇关于如何绕过Android验证和证书锁定(Certificate Pinning)的文章。由此,我觉得也有必要写一篇关于iOS的。正如Cody在博客中所说的,中间人(MitM)...

嘶吼RoarTalk
09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
11分钟前
0
0
smart-doc特殊功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
1
0
JavaEE——Junit

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 Junit Junit又名单元测试,Junit是用来测试Jav...

凯哥学堂
昨天
1
0
读《美丽新世界》

一、背景 十一国庆节从重庆回深圳的时候,做得绿皮车,路上看了两本书:李笑来的《韭菜的自我修养》和禁书《美丽新世界》。 上篇文章已经分享了 读《韭菜的自我修养》,这篇文章来记录一下《...

tiankonguse
昨天
1
0
archlinux下基于Jenkins,docker实现自动化部署(持续交互)

本文永久更新地址:https://my.oschina.net/bysu/blog/2250954 【若要到岸,请摇船:开源中国 不最醉不龟归】 -----------------------------------第一部分Jenkins的安装与使用-----------...

不最醉不龟归
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部