热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOSapp签名原理

基本原理:公钥能够验证私钥的签名是否正确。Apple后台有一个私钥A,iOS内置一个公钥A,与私钥A对应。(A:代表Apple,即苹果)本

基本原理:

公钥能够验证私钥的签名是否正确。

Apple后台有一个私钥A,iOS内置一个公钥A,与私钥A对应。(A:代表Apple,即苹果)

本地产生一对公钥L私钥L(L:代表Local,即本地),私钥L保存在本地公钥L(也就是.certSigningRequest文件)传到apple后台签名后生成证书可下载至本地证书的作用是可以验证私钥的签名,另外XCode在给app签名时也会通过证书找到对应的私钥,一个证书对应一个私钥(因为一个证书就是一个公钥,只能对应一个私钥)。

ps:开发中,公钥对应从开发者网站上下的certificate文件,私钥对应.p12文件

 

Provision Profile

描述文件,其中包含证书,及app的相关信息(如entitlements,bundle id,支持的device id列表之类的,这里只讨论跟签名相关的内容),app打包时会内嵌一个embedded.mobileprovison文件,这个文件会被apple用私钥A签名。

 

所以一个app被装到iPhone上的验证步骤如下:

iOS先通过内置的公钥A来验证embedded.mobileprovison文件的正确性,验证通过后从embedded.mobileprovison文件中取出公钥L(也就是证书certificate),来验证app是否被私钥L签名,当然一个embedded.mobileprovison文件中可能包含多个证书,推测此时的验证逻辑为,app只要被其中一个证书验证通过(即只要被一个其中一个证书对应的私钥签名),就认为app签名正确,另外安装时系统还会同步验证embedded.mobileprovison里的其他信息,如entitlement文件,基本原理就是验证app签名后的entitlement权限内容是否与embedded.mobileprovison里包含的entitlement文件一致(当然其中包括bundle id的验证,只不过这里只验证entitlement权限内容中的bundle id,而不去验证info.plist文件中的bundle id,iOS app签名时会包含entitlement文件内容,即签名时可以指定此app支持哪些权限),所以我们在重签名app的时候需要重新指定entitlement权限,使其与embeded.mobileprovison文件中的entitlement文件内容一致。

 

开发中常遇到的问题:(一般在手动签名的过程中可能会遇到)

一般来说开发中的embedded.mobileprovision文件都是从开发者网站上下载的,所以这个文件的正确性一般来说都是没问题的,所以如果一个app不能被装到iPhone上,一个可能的原因就是签名这个app的私钥所对应的证书(certificate,即公钥)没有在描述文件中,此时的解决办法就是重新生成描述文件,让其包含对应的证书(certificate)。另外跟签名相关的原因可能是证书(certificate)过期(意味着公钥过期,因为私钥是与之一一对应的,所以私钥也过期了,需要重新生成)。

另外一个常见的原因就是app签名后的entitlement权限内容与embeded.mobileprovision文件中的entitlement内容不一致,此时需要修改app签名时的entitlement权限内容,codesign --entitlements参数就是在签名的时候指定app支持哪些权限(ps:查看app重签名之前支持哪些权限可通过命令 codesign -d --entitlements :- Payload/GradleTest.app)。

 

例:

codesign -f -s "iPhone Distribution: ABC Information Technology Co., Ltd." --entitlements Entitlements.plist Payload/$1.app


推荐阅读
  • iOS推送手机消息的技术背后的奥秘揭示
    作者:allenzzhao,腾讯IEG运营开发工程师消息推送我们几乎每天都会用到,但你知道iOS中的消息推送是如何实现的吗?本文将从推送权限申请,到本地和远程消息推送, ... [详细]
  • iOS 苹果开发证书失效的解决方案(Failed to locate or generate matching signing assets)
    从2月14日开始,上传程序的同学可能会遇到提示上传失败的提示.并且打开自己的钥匙串,发现所有的证书全部都显示此证书签发者无效.出现以下情况:Failedtolocateorgene ... [详细]
  • iOS开发Debug和Release的理解
    2019独角兽企业重金招聘Python工程师标准参考:http:blog.csdn.netmad1989articledetails406580331&# ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了预加载多个本地WebView相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 1.webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用(1) ... [详细]
  • ios中级面试题(二)
    1.如何追踪app崩溃率,如何解决线上闪退当iOS设备上的App应用闪退时,操作系统会生成一个crash日志,保存在设备上。crash日志上有很多有用的信息,比如每个正在执行线程的 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 2.2以下安装:1.打开终端,进入cocos2d-x引擎文件夹(ls列目录cd进入文件夹)2.执行sudo.install-templates-xcode. ... [详细]
  • 如何使用Xcode7软件添加NTL库并运行C++程序。一、首先安装NTL库1、进入“ATourofNTL:ObtainingandInstallingNTLfor ... [详细]
  • Objective C接入Sonar代码扫描
    目录技术方案环境准备扫描器配置项目配置SonarQube配置jenkins接入一些坑技术方案Sonar本身有对OC的代码扫描插件——SonarCFamily,但是是收费的。出于成本 ... [详细]
author-avatar
zxcvbnm89
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有