技术源于生活,服务生活 Terry 随笔

密钥对,数字证书,数字签名相关记录

2016-05-10
Terry

证书无处不在

类似于个人身份证,护照,学生证,结婚证.有这个证,国家才承认.没这个证,对不起,你就是非法的.所以,证很重要. 在计算机的世界里,也同样需要这些证: Https需要证书, iOS开发需要证书,包括开发环境证书,生产环境(正式发布)证书等,软件发布同样也需要. 为了明白证书是什么,需要先了解几个概念

密码学

有关密码相关的东西,包含的内容很多.我们只要知道什么是 非对称加密技术 就行了.

世间本没有公钥,密钥.有的只是两个不同的密码.公布出去的那个密码就叫公钥.另一个没有公布出去的就叫密钥 比如对一段内容明文, 你用ABC (公钥)进行加密, 解密时却是使用123 (密钥).当然,若你用密钥加密内容,那一样可以使用公钥进行解密的, 公钥和私钥是成对的,相互解密

复杂点的例子:

小张有密钥A, 公钥B
小明拥有小张的公钥B

发送端进行加密
小张根据算法F对内容C做运算后得到内容D: D = F(C)
小张使用密钥A对内容D进行加密得到内容SD: SD = A(D)
小张使用密钥A对内容C进行加密得到内容SC: SC = A(C)
将内容发送给小明: SCD = SD + SC

接收端进行解密 
小明使用公钥B进行解密: 
C = B(SC)
D = B(SD)
D1 = F(C)
if D == D1 then 内容是正确的
else 内容不正确

摘要

一般就是指对一段大内容进行概括,用一句话可一小段文字来描写.对于计算传输来说,就是对内容进行某个算法F, 得到一小段内容,如:HASH, SHA1, SHA2算法

签名与验证

写个个人特有的名字咯.对计算机来说,就是你用自己的密钥,对摘要进行加密.而验证签名的过程就是反过来.接收方使用公钥将内容进行解密,用相同的算法到处摘要,再与接收到的摘要(同样使用公钥进行解密)进行比较,就可以得到结果:此内容有没有被篡改过

公钥管理(公证处,证书管理机构)

每个接收方可能会有很多不同的公钥,这些公钥保存在本地很容易被篡改替换.各种样的问题.这时候中介出现了,这个中介被大部分的用户所认同,有很高的社会地位.所以,为了让用户认同我们,我们需要先跟这个中介打交道.

我们请求中介帮我们把公钥进行加密,并且将我们加入白名单.当然大部分情况,中介都是要收费的.流程大概是这样的:

我们提交各种资料,包括公钥 
=> 中介认证后,用一个统一的密钥对,对我们的公钥进行加密(用它的私钥) 
==> 给我们发证书 
==> 我们发送数据,用自己的私钥生成签名, 将签名,证书和发送内容一起发给对方 
==> 接收言方拿到数据后,使用中介提供的公钥对证书解密得到我们的公钥,再用得到的公钥去解密内容与签名进行对比

以上是大概的流程,其中有些流程可能并不一致,但大概就是这样了. 中介指的是 CA 机构

小小总结: 证书就是一个文件,里面包含密钥,认证信息,其它扩展信息等等内容

iOS开发环境中的证书

Certificates

1.Development: 安装在电脑上以提供权限: 真机调试 2.Production: 除了开发版功能外,还提供发布App的权限

从xCode7.0之后,开发环境一般情况都能帮我们从苹果服务器中生成对应的证书

Identifiers

  1. App IDs: App的ID,可以为””. 一般用在开发版本.若是要发布,ID不能包括”“的.它设置了App所需要的服务或权限,分为Development版本和Distribution版本.如iCloud,Push Notifications,Apple Pay等等这些权限

Provisioning Profiles

权文件是对设备如iPod Touch、iPad、iPhone的授权,文件内记录的是设备的UDID和程序的App Id,即使被授权的设备可以安装或调试Bundle identifier与授权文件中记录的App Id对应的程序。 开发者帐号在创建授权文件时候会选择App Id,(开发者帐号下App Id中添加,单选)和UDID(开发者帐号下Devices中添加最多100个,多选)。

授权文件分为两种,对应相应的证书使用: 1.Developer Provisioning Profile(开发授权文件) 在装有开发证书或副本的电脑上使用,开发人员选择该授权文件通过电脑将程序安装到授权文件记录的设备中,即可进行真机测试。 注意:确保电脑有权限真机调试,即安装了开发证书或副本;在开发工具中程序的Bundle identifier和选中使用的授权文件的App Id要一致;连接调试的设备的UDID在选中的授权文件中有记录。

2.Distribution Provisioning Profile(发布授权文件) 在装有发布证书的电脑上(即配置证书的电脑,只有一台)制做测试版和发布版的程序。 发布版就是发布到App Store上的程序文件,开发者帐号创建授权文件时选择store选项,选择App Id,无需选择UDID; 测试版就是在发布之前交给测试人员可同步到设备上的程序文件,开发者帐号创建授权文件时选择AdHoc,选择App Id和UDID;只有选中的UDID对应的设备才可能安装上通过该授权文件制做的程序。

3.Keychain(开发密钥) 安装证书成功的情况下证书下都会生成Keychain,上面提到的证书副本就是通过配置证书的电脑导出Keychain(就是.p12文件)安装到其他机子上,让其他机子得到证书对应的权限。Developer Certification就可以制做副本Keychain分发到其他电脑上安装,使其可以进行真机测试。

注意:Distribution Certification只有配置证书的电脑才可使用,因此即使导出导出Keychain安装到其他电脑上,其他电脑也不可能具有证书的权限。


下一篇 AV Fundation框架

Content