美文网首页
ios签名机制概要

ios签名机制概要

作者: 不拘小节123456 | 来源:发表于2018-03-07 08:12 被阅读73次

    首先说明这篇文章没有什么特别的东西,只是尽量用最简单的逻辑来说明一下自己对ios签名机制的理解.

    签名机制的意义

    安全.苹果为了对App的环境有绝对的控制权,只有被苹果认可的应用才可以安装到手机上.可以避免应用被篡改,以及盗版应用的畅行,保护了开发者的利益.

    原理:非对称加密算法

    非对称加密算法是iOS的基础,它使用两份密钥(公钥,私钥)来对信息进行加密以及解密:对外公开的为公钥,签名放自己持有的密钥为私钥,通过私钥加密的内容只能公钥解密,而通过公钥加密的内容只有私钥能够解密.由于公钥反推私钥难度非常大,理论上只要密钥的位数足够长,反推基本是不可能的,所以非对称机密算法是被广泛使用的安全性非常高的加密算法.

    Hash算法

    由于非对称加密算法对明文的长度有要求,既不能超过密钥的长度,所以在使用非对称加密算法之前,会使用hash算法对明文进行处理

    Appstore 对签名的验证逻辑 1.png

                                            图1
    

    1,首先使用Hash算法对App数据进行处理得到摘要
    2,用私钥对摘要进行加密,得到签名

    2.png
                                             图2
    

    首先要说明两点
    1,每台iphone设备应该都有苹果特有的公钥
    2,每个通过App Store下载的应用都会带有苹果通过私钥的签名

    接下来说一下图2的逻辑:
    1,使用相同的hash算法对下载的到用户手机的App进行处理得到摘要1
    2,使用App公钥对签名进行解密,得到摘要2
    3,判断摘要1和2是否相等,如果相等那么认证成功.否者安装失败

    开发者

    以上流程可以满足一个普通用户的需求,但是无法满足开发者的需求.因为开发者为了调试需要无数次的安装app,如果每次都需要上传苹果签名,大家会疯的!!!!!所以苹果为开发者建立了本地签名系统.
    开发者会在自己的电脑上生成用于签名认证的公钥和私钥,以后安装 app 到手机上时会在本地进行认证,而无需将 app 上传到苹果的服务器上签名。但是苹果也必须要维护自己控制 app 安装的权利,那么苹果会怎么做呢?答案就是使用数字证书。

    证书

    开发者通过 钥匙串访问->证书助理->从证书颁发机构请求证书 生成 Certificate Signing Request 文件(CSR 文件),同时也在本地自动生成了相应的公钥和私钥,在填好必要的信息后,开发者将 CSR 文件上传给苹果用于生成数字证书。

    CSR 文件记录了开发者的个人信息、公钥、加密算法以及 Hash 算法等内容,可以使用以下命令来查看文件内容:

    openssl asn1parse -i -in CertificateSigningRequest.certSigningRequest
    

    苹果收到 CSR 文件后,会使用自己的私钥对开发者的公钥进行签名,最终生成一个数字证书(包含开发者账号信息、公钥以及相应的签名)返回给开发者,查看证书信息的命令如下

    openssl x509 -inform der -in ios_development.cer -noout -text
    

    点击安装证书后,钥匙串会自动将证书和相应的私钥对应起来,同时你还需要在 Xcode 中将签名证书设置为你刚刚安装的证书。此后在编译完 app 时,系统会使用数字证书对应的本地私钥对 app 进行签名,然后同数字证书一起安装到手机上,接下来 iOS 设备会通过 Apple 公钥来验证数字证书是否有效,验证通过后会使用数字证书中的公钥来验证 app 是否有效,最终判断 app 是否可以被安装

    Provisioning Profile

    仅有数字证书是不够的,为了防止权限被滥用,开发者还需要在苹果官网上注册用于开发的设备,仅有注册后的设备才被允许按照以上流程安装 app,官方限制最多100台.

    除此之外,苹果还需要对 app 的权限进行控制,例如是否能够使用 iCloud、Wallet、Maps 等,苹果将这些功能授权统称为 Entitlements。开发者将上述权限配置完成后,需要从苹果后台下载并安装相应的 mobileprovision 文件,该文件包含:
    1,AppId
    2,功能授权列表
    3,已注册的设备列表
    4,数字证书
    5,苹果签名
    当然,如果有需要的话,你可以使用以下命令来查看 mobileprovision 文件内容

    security cms -D -i embedded.mobileprovision
    
    
    3.png
                                图3
    

    1.开发者在本地生成公钥和私钥,然后把公钥上传给苹果并获取数字证书
    2,开发者在后台配置Appid,开发设备,功能权限,最后下载描述文件
    3,开发者用本地私钥签名app,并将描述文件随app安装到ios设备
    4,iOS 设备使用 Apple 公钥验证 mobileprovision 文件的签名以及数字证书的签名
    5,使用数字证书包含的公钥来验证 app 的签名
    6,验证安装 app 的设备是否在设备列表中,AppId 是否一致,Entitlements 和 app 中的权限是否对的上等等

    参考文章:https://www.jianshu.com/p/867431a5c7f7

    相关文章

      网友评论

          本文标题:ios签名机制概要

          本文链接:https://www.haomeiwen.com/subject/xbvdfftx.html