iOS开发者证书-详解/生成/使用

本文假设你已经有一些基本的Xcode开发经验, 并注册了iOS开发者账号.

相关基础

加密算法

现代密码学中, 主要有两种加密算法: 对称密钥加密 和 公开密钥加密.

对称密钥加密

对称密钥加密(Symmetric-key algorithm)又称为对称加密, 私钥加密, 共享密钥加密.

这类算法在加密和解密时使用相同的密钥.

例如: 最常见的应用场景 - 系统登陆.

要成功登陆系统, 你必须输入正确的密码, 这密码是唯一的, 是与创建时一样的. 同样 的, 其他人要成功登陆, 他也要输入这唯一的正确的密码.

公开密钥加密

公开密钥加密(public-key cryptography, 也称为非对称密钥加密).

这类算法在加密和解密时使用不相同的密钥.

这类加密算法对应有两个密钥: 公钥和私钥. 公钥, 是公开的, 任何人都可以获得; 私钥 , 是私密的, 只由持有者所有.

这类加密算法的特点是: 用公钥加密的内容只能用私钥解密, 用私钥加密的内容只能 用公钥解密.

这类加密算法的特点决定了, 它即可以用于实现数据加密, 又可以用于实现身份认证 (数字签名).

加密 & 认证

我们需要区分加密和认证这两个基本概念.

  • 加密是将数据资料加密, 使得非法用户即使取得加密过的资料, 也无法获取正确的资料 内容, 所以数据加密可以保护数据, 防止监听攻击. 其重点在于数据的安全性.

  • 身份认证是用来判断某个身份的真实性, 确认身份后, 系统才可以依其身份给予相应的 权限. 其重点在于用户的真实性.

要实现这两个要求(加密和认证), 都需要用到加密算法, 但并不是所有的算法都可实现身 份认证. 身份认证现在一般使用公开密钥加密算法.

下面将重点说明如何使用公开密钥加密算法实现加密和认证.

如何实现加密?

对于某一用公钥加密的数据, 只能由对应的私钥解密.

例如, 我要给你发一封加密邮件. 我必须有你的公钥, 我用你的公钥给邮件加密. 这样 就能保证邮件不被别人看到, 而且不被篡改. 因为只有你可以用你自己的私钥解密.

如何实现认证?

对于某一用私钥加密的数据, 只能由对应的公钥解密. (记住, 私钥只由持有人所有)

用我(A1)的私钥给邮件加密, 发给你(B1)之后, 你能用我的公钥解密. 这样就能保证 邮件是我(A1)发的.

数字身份证 & 数字证书(Certificates) & 数字证书认证机构(CA) & 根证书

数字身份证

数字身份证, 是身份标识方式的一种, 是一对"钥匙", 即一对公钥&私钥. 它一般 用本地系统工具生成.

o

数字证书认证机构

数字证书认证机构(CA, Certificate Authority), 是负责发放和管理数字证书的权威机构, 并作为交易中受信任的第三方, 承担公钥体系中公钥的合法性 检验的责任.

数字证书

数字证书, 是一种用于计算机的身分识别机制. 数字证书不是数字身份证, 而是身份认证机构(数字证书认证机构)数字身份证上加上数 字签名. 这一行为表示身份认证机构已认定这个持证人. 这里的"认定"是怎么做到 的呢? 参考'如何验证数字证书的有效性?'.

数字证书一般含这样一些信息:

  • 证书发布者
  • 证书持有者
  • 有效期(证书在这个时期之前或之后无效)
  • 证书持有者的公钥(*)
  • 证书扩展, 包含一些额外信息
  • 所使用的哈希算法
  • 数字签名, 该数字签名是对以上信息的哈希值用CA的私钥加密生成(*)

如何验证数字证书的有效性?

即, 如何确保数字证书是经过CA认证的呢?

注意: 对于某一用私钥加密的数据, 只能由对应的公钥解密.

原理: 计算数据证书的数据信息的哈希值H1, 对证书上的数字签名用CA的公钥解密得 H2, 如果H1等于H2, 则该证书有效, 且是经CA认证的.

CA的公钥如何获得呢? 它包含在根证书里.

根证书

根证书, 是CA给自己颁发的数字证书, 是信任链的起始点. 它一 般放在CA网站上, 供任何人下载.

数字签名

数字签名, 是一种类似写在纸上的普通的物理签名, 但是使用了公钥加密领域的 技术实现, 用于鉴别数字信息的方法.

数字签名具有完整性, 不可抵赖性(即不可否认性).

从'如何实现认证?'一节, 我们知道可以利用公开加密算法的特点实现"认证", 也就是签 名. 但是这会有一个问题, 任何人都可以或可能冒充我(A1)! 即, 任何人都可以冒充我 (A1)把他经用他的私钥加密的数据和他的公钥发给你. 也就是说, 你无法确保你接收到的 公钥就是我(A1)的!

所以, 这就需要一个机制来保证. 这机制就是基于前面所说的"数字证书"和"CA". 它可确 保我(A1)是经过CA认证的.

数字签名原理

  • 签名:

    发送者先对要发送的"数据"计算一个哈希值, 再用自己的私钥对这个哈希值加密生成一 个"签名(值)", 同时发送者要拥有一个向CA申请得到的"数字证书"(记住, 其记录有公 钥), 最后发送者把"数据", "签名(值)"和"数字证书"一起发送给接收者.

  • 验证签名:

    接收者接收到发来的"数据", "签名(值)"和"数字证书"后, 会作一系列验证来判断这一数 字签名是否有效:

    • 打开并验证"数字证书"的有效性;
    • 计算"数据"的哈希值H1, 用"数字证书"记录的公钥对"签名(值)"进行解密得到值H2, 如 果H1==H2, 则该"数字签名"有效.

Xcode代码签名相关

Keychain

MAC下用于存储和管理密钥等私密信息的工具.

Identifiers / Bundle ID / App ID

这是应用的唯一标识.

Device UUID

这是设备的唯一标识.

Provisioning Profiles

这就是我们最后要生成的 Profiles, 它记录了 App ID, UUID 和其所信任的证书.

当Xcode要把一个应用部署到真机上时, 会作相应检验:

  • Keychain中是否有相匹配的有效证书? 参考'如何验证数字证书的有效性?'
  • Profiles是否有效? 参考'数字签名原理'
  • 要部署的App的App ID是否与Profiles记录的App ID相匹配?
  • UUID是否相匹配?

只有在所有检验都通过了, 才能部署到真机上.

Start

生成密钥

填上Email和Name, 并选择"Saved to disk".

最后在"keys"下生成一对新的密钥, 为了以后分辨方便, 最好对它重新命名, 双击可以重 命名. 同时也会生成一个CRS文件.

安装根证书

这个证书叫做 Worldwide Developer Relations Certificate Authority, 通过这个链接 可以下载: https://developer.apple.com/certificationauthority/AppleWWDRCA.cer, 一般下载下来的文件名为: AppleWWDRCA.cer.

该证书一般由 Xcode 自动安装.

向Apple(CA)申请开发者证书

登陆苹果开发者中心, 到 Certificates, Identifiers & Profiles | iOS Apps | Certificates | Development 下, 新增一个Certificates:

点下一步会出现, 要求你先生成一个CRS文件, 这就是我们在"生成密钥"时做的:

直接下一步, 并把刚才生成的CRS文件上传, 最后提交生成证书. 把它下载下来, 双击, 其会自动添加到Keychains中.

创建 App ID

Identifiers下创建一个新的App ID.

把设置的UUID加入Devices注册列表

Devices下添加.

生成Profiles

在 Certificates, Identifiers & Profiles | iOS Apps | Provisioning Profiles | Development 下, 点击添加一个新的Profiles.

到"选择证书"页面时, 有一点要注意, 最好只选上刚刚生成的证书, 不要选择所有. 因为 "选择所有"在Keychain中已有别的证书下, 容易出现各种奇葩问题, 后面会有详细说明.

最后, 把它下载下来, 双击添加到Xcode中.

配置到Xcode

至此, 一切OK!

可能遇到的错

如果你按上面的执行下来, 最后一编译应用发现还是不行, 报类似这种错,

在XcodeOrganizer中也会显示出错:

这错一般是由于证书不匹配, 要检查:

  • 保证生成Profile时, 选择且只选择了一个证书;

  • 保证Keyschain里没有重复的证书.

iOS开发者证书-详解的更多相关文章

  1. iOS开发者证书-详解/生成/使用

    本文假设你已经有一些基本的Xcode开发经验, 并注册了iOS开发者账号. 相关基础 加密算法 现代密码学中, 主要有两种加密算法: 对称密钥加密 和 公开密钥加密. 对称密钥加密 对称密钥加密(Sy ...

  2. iOS证书详解--再转

    一.成员介绍1.    Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1)    Developer Certification(开发证书)安装在电脑上 ...

  3. iOS证书详解--转载

    一.成员介绍1.    Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1)    Developer Certification(开发证书)安装在电脑上 ...

  4. iOS证书详解

    一.成员介绍1.    Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1)    Developer Certification(开发证书)安装在电脑上 ...

  5. iOS-申请测试证书详解(多图原创)

    申请测试证书详解 前言 App开发和发布过程中证书基础知识:1. Certification(证书)证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:1) Developer Certifi ...

  6. iOS应用开发详解

    <iOS应用开发详解> 基本信息 作者: 郭宏志    出版社:电子工业出版社 ISBN:9787121207075 上架时间:2013-6-28 出版日期:2013 年7月 开本:16开 ...

  7. 了解iOS消息推送一文就够:史上最全iOS Push技术详解

    本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...

  8. Chrome开发者工具详解(5)-Application、Security、Audits面板

    Chrome开发者工具详解(5)-Application.Security.Audits面板 这篇文章是Chrome开发者工具详解这一系列的最后一篇,介绍DevTools最后的三个面板功能-Appli ...

  9. iOS开发:详解Objective-C runTime

    Objective-C总Runtime的那点事儿(一)消息机制 最近在找工作,Objective-C中的Runtime是经常被问到的一个问题,几乎是面试大公司必问的一个问题.当然还有一些其他问题也几乎 ...

随机推荐

  1. Ubuntu安装 和 python开发

    在ubuntu上安装pycharm 可以好几种下载办法 1.pycharm之linux版本下载地址: https://download.jetbrains.8686c.com/python/pycha ...

  2. ORACLE 参数设置绑定变量

    使用 CURSOR_SHARING 参数 EXACT  默认,不替换 SIMIAR 当替换不会影响到执行计划时,才会将字面量替换成绑定变量 FORCE 只要有可能,字面量会被替换为绑定变量

  3. 如何添加设备UDID到开发者中心

    如何添加设备UDID到开发者中心 1. 登录开发者中心 2. 选择证书那一项 3. 选择Devices 4. 点选+按钮 5. 填上设备的UUID以及设备名字然后添加上 大功告成:) 附录: 如何获取 ...

  4. Ardunio led呼吸灯

    #include <Adafruit_NeoPixel.h> #define PIN 9#define LED_NUM 16Adafruit_NeoPixel strip = Adafru ...

  5. 汉诺塔问题php解决

    面向过程解决 <?php function hanio($n,$x,$y,$z){//把n个盘子,按照要求从x移到z,y是中介 //递归跳出条件 if($n==1){ move($n, $x, ...

  6. Phthon3.4 新特性

    1.       print的变化:. 在python3.0中,print成为了一个函数,将传入的参数一输出. Python3.0: Python 2.5: 2.使用比较操作符时,如果被比较的对象没有 ...

  7. JPA规范实现

    JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. JPA 是 JCP定义的一种规范,要使用此规 ...

  8. [SDOI2017]切树游戏

    题目 二轮毒瘤题啊 辣鸡洛谷竟然有卡树剖的数据 还是\(loj\)可爱 首先这道题没有带修,设\(dp_{i,j}\)表示以\(i\)为最高点的连通块有多少个异或和为\(j\),\(g_{i,j}=\ ...

  9. 20165302 2017-2018-2《Java程序设计》课程总结

    20165302 2017-2018-2<Java程序设计>课程总结 每周作业汇总 预备作业1 对师生关系的看法 预备作业2 C语言基础调查 预备作业3 安装虚拟机,初步学习虚拟机及常用命 ...

  10. Java静态代理学习

    代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式一般涉及 ...