Michael's Blog

Michael's Blog Space

 

Iphone开发的代码签名

Iphone开发的代码签名 英文版链接: http://developer.apple.com/iphone/gettingstarted/docs/signingcodeforiphonedev.action 代码签名确保代码的真实以及明确识别代码的来源。在代码运行在一个开发系统以前,以及在代码提交到Apple发布以前,Apple要求所有的的应用程序都必须进行数字签名。另外,Apple在发布每一个应用程序之前都要添加他自己的数字签名。 数字签名和签名标识 Apple要求所有的iphone应用程序都需要使用apple提供给已注册的iphone开发者的签名许可进行数字签名。这个签名证明了该应用程序开发者的身份以及确保这个应用程序在签名以后没有被修改或者篡改过。 数字签名使用两种截然不同的方式,即:众所周的公有密钥和私有密钥的算数关系加密术。私有密钥使用在签名的过程中。公有密钥用来验证这个签名的有效性。公有签名被存储在签名证书中,而私有签名被单独的存储,这种证书和算数加密结合的私有密钥被叫做数字标识或者签名标识。 为iphone开发获取签名标识,你需要使用Keychain Access utility里边的Certificate Assistant来创建一个签名许可请求Certificate Signing Request (CSR),你提交这个请求是希望得到使用iphone开发者计划的计划入口的正式许可。当你的请求被正式批准以后,下载这个证书文件,双击这个文件,就可以将其安装到你的keychain(密钥链中),在你使用Certificate Assistant utility生成一个签名许可请求Certificate Signing Request (CSR)的过程中,这些你可能看得不太明显,因为它自动生成了一对共有-私有密钥。它包括发送给apple的许可请求中的公有密钥(public key)和存储在你的密钥链(keychain)中的私有密钥(private key)。 当你下载安装签名许可的时候, Keychain Access utility将其与私有密钥关联,以创建签名标识。打开 Keychain Access utility 点击 Category面板下的My Certificates 以察看许可的关联私有密钥。 当你安装了已签名的应用程序到你的iphone上去的时候,iphone OS 将要验证签名以确保该应用程序已签名并在签名以后未被篡改。如果签名无效或者你根本就没有签名,iphone OS 将不允许该应用程序运行。 同样,当你提交你的应用程序给apple 审批和部署的时候,首先,你必须用你的签名标识为你的应用程序签名,同时随程序一起提交你的签名证书。(私有密钥不用提交至apple。)然后 Apple验证该程序代码是否来自有效的已注册的开发者。 最后 Apple用她自己的签名证书为你的已签名的应用程序签名。然后你的应用程序才能够在iPhone ,iPod Touch上正常的运行。这种机制确保这些设备的拥有者从iTunes上边下载的那些已注册的开发者所编写的应用程序的安全性,并且这些应用程序没有被修改过。 将签名标识复制到其他机器 如果你用来开发的机器不只一台(例如,办公电脑和你的家用笔记本电脑),你需要在两台上边都有你的签名标识。因为你从 程序门户网站(Program Portal)上边下载的签名许可文件不包括你的私有密钥,仅仅将这个签名许可文件复制到你的另一台电脑上是不够的。你需要使用 Keychain Access 导出一个个人信息替换文件( Personal Information Exchange ),具体操作步骤如下 打开 Keychain Access,选择 文件,导出项,(Keychain Access-> File-> Export Items )导出许可和私有密钥作为你的个人信息替换文件,将其复制到另一台机器上,双击这个文件将许可和密钥导入到keychain下即可。 保持你的私有密钥安全有效 只要你持有签名标识,尤其是你的私有密钥,这个系统将是非常安全的。然而如果有任何未经授权的人使用了你的签名许可和私有密钥,他们可以修改你的应用程序并且可以为这些修改代码申请签名,或者他们也可以以你的身份写他们自己的应用程序。因此你的私有密钥的自身安全是防止你的软件和标识被恶意使用的最基本的手段。 在你获取签名标识和处理代码签名之前,你必须要确定你公司内谁将拥有这个标识,谁使用这个标识,以及如何保证这个标识的安全性。例如,如果这个标识一定是多人使用,你可以将其放置在一台比较安全的电脑的keychain中,并且为keychain分配一个核实用户身份用的密码,或者你也可以将这个密钥放置在一个用户有PIN码的smart卡中。 默认情况下,你的Keychain密码和你的机器登陆密码是相同的,并且只要你登陆到你的机器当中,keychain将保持解锁状态。这就等同于你将你的车钥匙放在了后门旁边的桌子上,并且后门整天都不上锁。如果只有钥匙能开你的车的话,你没有有效的保护你的车钥匙,怎么能保证你的车的安全呢? 为了保证签名标识的安全,以及其他一些keychain下的有价值的秘密信息的安全性,你至少应该采取如下措施: • 设置你的keychain在不使用的情况下自动加锁:在 Keychain Access utility下,选择Edit-> Change Settings for Keychain 并且勾选多选框(前两项就可以了)。 • 为你的Keychain使用一个不同于登陆密码的密码: 在 Keychain Access utility下,选择Edit-> Change Password 来改变 Keychain 的密码。在改变密码对话框中勾选加锁图标来获取密码助手。要确保记住你修改后的密码,并且不要随便写下你的密码。 另外,钥保证你的电脑的物理安全,防止未授权的人员使用你的电脑。 像其他重要的数据一样,你最好将签名标识备份到一个安全的地方。你可以将其放到其他机器的keychain中,或者以个人信息替换文件( Personal Information Exchange (.p12) file )的方式存到一张加密的CD或者加密的硬盘镜像中。确认你所使用的密码都是健壮的,并且拥有签名许可的电脑的物理安全(尽量不要允许未信任的人员使用他们)。 从哪里开始? iPhone Developer Program 网站上有详细的获取和安装签名标识的规程,点击 iPhone DevCenter 页右上角的网站图标。(你需要一个登陆进去,这个连接才会有效。) 获取更多关于数字签名,加密密钥以及证书许可等信息,请访问 Security Overview and Code Signing Guide. Security Overview http://developer.apple.com/documentation/Security/Conceptual/Security_Overview/Introduction/chapter_1_section_1.html Code Signing Guide http://developer.apple.com/documentation/Security/Conceptual/CodeSigningGuide/Introduction/chapter_1_section_1.html

posted on 2008-08-06 20:10  Michael.Wang  阅读(1505)  评论(0编辑  收藏  举报

导航