最近在负责ios的项目,被各类证书跟签名概念弄的一脸懵逼,并且以前也没怎么接触过IOS的测试,显的更加小白了,所以想把这块知识弥补下;html
先来看看苹果的签名机制是为了作什么。
在 iOS 出来以前,在主流操做系统(Mac/Windows/Linux)上开发和运行软件是不须要签名的,软件随便从哪里下载都能运行,致使平台对第三方软件难以控制,盗版流行。
苹果但愿解决这样的问题,在 iOS 平台对第三方 APP 有绝对的控制权,必定要保证每个安装到 iOS 上的 APP 都是通过苹果官方容许的,怎样保证呢?就是经过签名机制。ios
通常说的签名指的就是数字签名,它是基于非对称加密算法实现的;
什么是非对称加密?
非对称加密
是相对于对称加密
而言的;
但不管是哪一种方式的加密,目的都是为了保护被加密的内容;git
度娘关于对称加密的解释:算法
采用单钥密码系统的加密方法,同一个密钥能够同时用做信息的加密和解密,
这种加密方法称为对称加密,也称为单密钥加密。
复制代码
嗯,看不懂吧?懵逼吧?不要紧,接着看~
xcode
jb有一封信,只想给本身跟YY看,因而JB为这封信设置了密码(加密),而后寄给YY,YY只要知道信的密码就能够查看其中的内容(解密),别人即便拿到信想看,但没有密码(密钥),也没法查看里面的内容;安全
所谓的对称就是加密和解密的过程使用的是相同的密钥;服务器
与对称加密不一样,非对称加密算法的加密和解密使用不一样的两个密钥.这两个密钥就是咱们常常听到的公开密钥
(公钥)和私有密钥
(私钥);app
公钥和私钥的关系是:
公钥和私钥通常成对出现;函数
若是你的消息使用公钥加密,那么须要该公钥对应的私钥才能解密;测试
若是你的消息使用私钥加密,那么须要该私钥对应的公钥才能解密;
非对称加密的做用是:
保护消息内容, 而且让消息接收方肯定发送方的身份;
不懂?接着看吧~
仍是上面的例子,使用对称加密的问题在于,一旦密钥在传输过程当中泄露了,保密性就荡然无存了;
既然对称加密的安全性会低一些,那就采用非对称加密,这样,JB 跟 YY就须要各自持有一对属于本身的公钥和密钥;
JB写的信只想给YY看,那么YY跟别人会有什么不同的特质呢?那就是YY拥有只有他本身知道的密钥!
若是JB使用YY的公钥加密,那么就只有YY的密钥才能解密,这样就能达到只让YY看的目的;
这里须要说明下,公钥是公开给别人开的哦;
那有一种状况,既然YY的公钥是公开的,假若有一个SB想冒充JB,使用YY的公钥加密而后给YY写一封信;
JB为了不这种状况的发生,把信的内容用JB本身的密钥进行加密,YY收到信后,使用JB的公钥解密(只有JB的公钥才能解开使用JB私钥加密的内容),若是能够解开,那么YY就知道这封信的确是JB发的,这是为了肯定消息发送方的份;
可能文字看上去会懵逼,所以就花了个流程图,便于理解:
上面这个,就是非对称加密,回到IOS自己,当咱们想把写好的IOS程序运行到真机时,会使用到这种非对称加密的方式进行认证,从而确保程序的来源是可信且安全的~
那数字签名又是什么?
简单的话,数字签名的做用是对某一份数据打了标记,表示认这份数据,至关于签了个名,而后再发送给其余人,其余人能够知道这份数据是通过我认证的,数据没有被篡改过;
这里的话,直接贴一峰大神的翻译文章,方便了解;
连接以下:数字签名是什么
1)鲍勃有两把钥匙,一把是公钥,另外一把是私钥。
2)鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。
3)苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就能够达到保密的效果。
4)鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即便落在别人手里,也没法解密。
5)鲍勃给苏珊回信,决定采用"数字签名"。他写完后先用Hash函数,生成信件的摘要(digest)。
6)而后,鲍勃使用私钥,对这个摘要加密,生成"数字签名"(signature)。
7)鲍勃将这个签名,附在信件下面,一块儿发给苏珊。
8)苏珊收信后,取下数字签名,用鲍勃的公钥解密,获得信件的摘要。由此证实,这封信确实是鲍勃发出的。
9)苏珊再对信件自己使用Hash函数,将获得的结果,与上一步获得的摘要进行对比。若是二者一致,就证实这封信未被修改过。
10)复杂的状况出现了。道格想欺骗苏珊,他偷偷使用了苏珊的电脑,用本身的公钥换走了鲍勃的公钥。此时,苏珊实际拥有的是道格的公钥,可是还觉得这是鲍勃的公钥。所以,道格就能够冒充鲍勃,用本身的私钥作成"数字签名",写信给苏珊,让苏珊用假的鲍勃公钥进行解密。
11)后来,苏珊感受不对劲,发现本身没法肯定公钥是否真的属于鲍勃。她想到了一个办法,要求鲍勃去找"证书中心"(certificate authority,简称CA),为公钥作认证。证书中心用本身的私钥,对鲍勃的公钥和一些相关信息一块儿加密,生成"数字证书"(Digital Certificate)。
12)鲍勃拿到数字证书之后,就能够放心了。之后再给苏珊写信,只要在签名的同时,再附上数字证书就好了。
13)苏珊收信后,用CA的公钥解开数字证书,就能够拿到鲍勃真实的公钥了,而后就能证实"数字签名"是否真的是鲍勃签的。
正文看完下来,对数字签名以及数字证书有了初步认识了= =
1)苹果开发者中心网站
2)开发者账号的类型:
我的-$99(约688元/年)(调试证书最多只能有两个)
公司-$99(约688元/年)须要提供邓白氏编码,用于企业认证,能够进行团队开发管理
企业-$299,须要提供邓白氏编码,程序不能上架到AppStore(用于企业内部办公软件等)(调试证书最多有五个)
1)添加证书
2)选择证书
3)准备建立CSR文件
4)建立CSR文件01(打开钥匙串->证书助理->从证书颁发机构请求证书)
5)建立CSR文件02(填写电子邮件地址,经常使用名称,这两项均可以随便填,注意要把CSR文件存储到磁盘)
6)建立CSR文件
7)选择刚刚建立的CSR文件
8)建立证书完毕,下载证书
从 AppStore 下载的应用验证流程很是简单,苹果官方身材一对公私钥,在ios里内置一个公钥,私钥由苹果后台保存,当传 App 上 AppStore 时,苹果后台用私钥对 APP 数据进行签名,iOS 系统下载这个 APP 后,用公钥验证这个签名,若签名正确,这个 APP 确定是由苹果后台认证的,而且没有被修改过,也就达到了苹果的需求:保证安装的每个 APP 都是通过苹果官方容许的。
那平常开发中,总没可能每次都提交到App Store的,因此在本地调试时,设备会把对APP的验证,改为对开发者的验证;
此处的开发者帐号,就是在 Apple Developer Center 中所申请的开发者帐号,一旦信任以后,每次 build 的时候,iOS 设备就将验证该开发者身份,而不是验证你 build 的 App。如此一来,便省去了应用包上传、下载的过程。咱们知道,验证 App 是经过签名机制,来肯定安装包来源的,而此处的验证开发者身份,又是怎样的机制呢?
首先,iOS 设备须要验证你的开发者身份,这是基于 macOS 的一种证书策略,若是打开钥匙串访问,选中证书,咱们能够看到这样的一堆东西:
在这里能看到各类各样的证书;
当在 Xcode 添加本身的帐号后,并在项目中将 Team 选择为本身的开发者帐号后,钥匙串中就多出了这么一个东西:
其实,也就2个事情:
上述的流程惟一问题是,这个密钥是在本地生成的,若是更换了电脑,本地的密钥对就会改变。这时候,你须要将旧 mac 上的证书导出,并安装到新的电脑上。
本文主要介绍了签名跟证书的只是,包括对称加密跟非对称加密,以及数字证书相关信息,而且介绍了App Store跟xcode的证书逻辑,从大体上对IOS证书这块起到扫盲的做用,具体细节就再也不深刻了,大体就先这样吧,后续须要再另写一篇~
谢谢你们~