苹果证书和公钥私钥加密

今天看了点关于公私钥加密的内容,赶快记下省的忘记了。

这里有几个概念:公钥,私钥,加密,认证,认证中心(CA),数字证书。

公钥和私钥是属于非对称性加密,公钥和私钥是完全不同的,但是相互对应的。一把私钥只能对应一把公钥。顾名思义,公钥是对外开放的,所有人都可以获得,私钥是自己保管的。

加密与认证

基于公钥的加密

       加密的目的是保证密文只能由特定人读取,其他人都不能获知里面的内容。公钥的作用就是加密。举例说明:Alices发信息给Bob。她会用Bob给的公钥对明文进行加密。Bob得到密文后,用自己的私钥解密。这个过程保证即使其他人得到了密文也没法看。

基于公开密钥的加密过程

图1

基于私钥的认证

       私钥的作用是鉴别用户的真伪。还是上面的例子,Alices给Bob发信。但是Bob的公钥很多人都有,如何知道收到的信是Alices发的呢?就要靠私钥认证。Alices给Bob发信的时候可以附带一段信息,然后通过自己的私钥把这段信息加密。Bob收到信后,首先用Alices的公钥就附带信息进行解密,如果正确就说明这封信确实是Alices发的,然后再用自己的私钥解密信的具体内容。


基于公开密钥的认证过程

图2

认证中心(CA)与数字证书

       认证中心的作用是保证公钥的正确。比如:Alices想给Bob发一封绝密的信件,而此时,Alices和Bob都没有对方的公钥。这时,Bob给Alices的公钥,Alices如果知道是Bob给的而不是其他人冒充给的?怎么办?!这时就要CA出马了。Bob提交自己信息和公钥给CA。CA通过自己的私钥加密这些信息,生成一个数字证书。Bob把这个数字证书给Alices,Alices通过CA的公钥对数字证书解密,得到公钥就是Bob的公钥。

        个人感觉非对称加密一个很重要的一环就是CA的作用。首先,CA要保证它的公钥不能被替换,否则都别玩了。这个估计不难,确定个网址,只有从这下载的才是CA的公钥。或是其他更高级的措施。其次,CA要保证对个人的认证。比如Tom提交个人信息和公钥后CA就要保证不能冒充为Bob的。这个估计靠人或其他措施,总之能保证。这些都是CA的事,我们不管。

图3

苹果的签名

        重头戏来了,下面就说一下苹果的签名与上面的关系。搞了这么久的iOS开发,经常被开发中各种证书给搞晕,这真是一个大坑,但是不得不过。      

一、数字签名(digital signature)

对指定信息使用哈希算法,得到一个固定长度的信息摘要,然后再使用 私钥 (注意必须是私钥)对该摘要加密,就得到了数字签名。所谓的代码签名就是这个意思。

二、数字证书(digital certificate)

证书生成

开发者在申请iOS开发证书时,需要通过keychain生成一个CSR文件(Certificate Signing Request),提交给苹果的 Apple Worldwide Developer Relations Certification Authority(WWDR)证书认证中心进行签名,最后从苹果官网下载并安装使用。这个过程中还会产生一个私钥,证书和私钥在keychain中得位置如图:

iphone-developer-keychain.png

图4

证书组成

经过WWDR数字签名后的数字证书长这个样子:

20130603170838968.png

其中包含两大部分:

· 证书本身

包含用户的公钥、用户个人信息、证书颁发机构信息、证书有效期等信息。

· 证书签名

WWDR将上述证书本身内容的使用哈希算法得到一个固定长度的信息摘要,然后使用自己的私钥对该信息摘要加密生成数字签名,整个过程如图所示:

20130603170752859.png

证书使用

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

20130603170924312.png

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

证书存在的意义

通过证书使用过程可以看出,证书本身只是一个中间媒介,iOS系统对证书并不关心,它其实只想要证书中包含的开发者的公钥!!

但是开发者怎么才能证明公钥是自己的呢?iOS安全系统怎么才能相信这个公钥就是这个开发者的呢?

不管是哪一个开发者对iOS的安全系统说,这个公钥就是我的,系统是都不相信的,即系统对开发者有着百分之百的不信任感。但是iOS安全系统对自家的WWDR是可信任的,苹果将WWDR的公钥内置在了iOS系统中。有了证书,iOS安全系统只需要通过WWDR的公钥就可以获取到任何一个开发者的可信任的公钥了,这就是证书存在的意义!!

三、公钥(public key)

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

iOS安全系统通过证书就能够确定开发者身份,就能够通过从证书中获取到的公钥来验证开发者用该公钥对应的私钥签名后的代码、资源文件等有没有被更改破坏,最终确定应用能否合法的在iOS设备上合法运行。

四、私钥(private key)

每个证书(其实是公钥)都对应有一个私钥,

私钥会被用来对代码、资源文件等签名。只有开发证书和描述文件是没办法正常调试的,因为没有私钥根本无法签名。

五、provisioning profile的生成

还记得刚开始为了生成这玩意也费了很大劲。首先通过钥匙串生成一个csr文件,把这个文件提交给苹果开发中心,生成一个cer文件。其实这个过程就是把自己的公钥给Apple,至于上面提到的如果保证公钥的确定性,就靠进入开发中心的账号和密码了,如果这玩意泄露了,那就谁也无能为力。

下载安装cer文件后,就会在钥匙串中多出个选项,如图4所示。下面是自己的私钥,这个很重要。别问私钥存在哪,我也不知道,但是它能导出为p12文件。

       cer搞定后就是在开发者中心添加appID,设备等,不详述了。 最后到生成provisioning profile。首先你要选类型,就是用于开发还是用于发布,其次是appID。下面的选项很重要,是选择certificates,这个就是选择你要包含的公钥,它是用来加密用的,我一般会都选。如果是开发的话,下面就是选择设备了,然后命个名就完事了。设计到加密的就是certificates的选择。

      所以开发的时候私钥也就是P12文件和provisioning profile匹配是最重要的。私钥对代码进行加密,公钥解密。整个过程就是认证的过程,保证了,iOS设备安装的程序是经过苹果审核同意的。这也就是苹果费这么大劲的目的。

        在Xcode6中codesing和provisioning配置都是可选择的,选择一定的匹配,否则要不是真机调不了,要不就是上传不成功。

        简述一下整个过程:首先开发者上传csr文件,即把公钥给苹果。生成provisioning profile时选择对应的公钥。然后下载安装相应的provisioning文件。在程序打包时,会用私钥就代码进行加密,然后把provisioning文件包含到app文件中。当iOS设备安装应用时,首先用CA的公钥解密出开发者的公钥,然后再用开发者的公钥解密出代码,完成安装。

       看来苹果为了保证代码的来源,也是蛮拼的!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值