前言
先来看看苹果的签名机制是为了做什么。在 iOS 出来之前,在主流操作系统(Mac/Windows/Linux)上开发和运行软件是不需要签名的,软件随便从哪里下载都能运行,导致平台对第三方软件难以控制,盗版流行。苹果希望解决这样的问题,在 iOS 平台对第三方 APP 有绝对的控制权,一定要保证每一个安装到 iOS 上的 APP 都是经过苹果官方允许的,怎样保证呢?就是通过签名机制。
非对称加密
可以说有计算机的地方就有非对称加密,我们平时说到的数字签名,就是非对称加密实现的。相对于对称加密,一个秘钥用来加密和解密,非对称加密会有已对公私钥,公钥加密只有私钥能解密,私钥加密只有公钥能解密。有很多种,比如RSA,ECC,DH,一般的RSA加密算法就是私钥加密,公钥解密,只要保证私钥不泄露,一般是很安全的。这里有两个文章详细介绍了RSA非对称加密的原理。
阮一峰RSA介绍
数字签名
可以想象现实中,一份文件的签名只要是客户画押或者签字,就能代表这份文件是出自某个客户,而且是被客户所认证过的。那么计算机中的签名也一样,通过对一段数据进行签名,传递给别人,别人就知道这份数据是出自我想要的那个人发给我的,而且是没有被篡改的。
那么有了非对称加密,就能实现这个数字签名:
1、首先要有一直摘要算法,针对同一份数据的摘要是一致的,而且数据有一点改动,摘要完全不同,而且长度足够短,因为RSA非对称加密的值不能太大。这里我们常用的就是SHA256活着MD5
2、作为签名方,私钥自己拿着,公钥发给需要接受数据的人
3、一般将原始数据进行摘要算法,然后用私钥加密,最后生成的签名和原始数据一同发给接收方
4、用户收到数据和签名后,用公钥解密得到摘要。同时用户用同样的算法计算原始数据的摘要,对比这里计算出来的摘要和用公钥解密签名得到的摘要是否相等,若相等则表示这份数据中途没有被篡改过,因为如果篡改过,摘要会变化。
HTTPS证书原理
有了上面非对称加密的了解和什么是数字签名后,我们来看看HTTPS的整个过程是怎么样的。
分为证书制作和证书认证过程,先看下图
证书制作过程
1.服务方S向第三方机构CA提交公钥、组织信息、个人信息(域名)等信息并申请认证;
2.CA通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;
3.如信息审核通过,CA会向申请者签发认证文件-证书。 证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA的信息、有效时间、证书序列号等信息的明文,同时包含一个签名; 签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA的私钥对信息摘要进行加密,密文即签名;
注意点:
服务器自己有一套公钥私钥,传输是不安全的,因此介入了CA权威机构,申请的时候把公钥给CA进行验证,然后CA拿着公钥一起其他信息弄成证书。先把证书理解成一段数据,然后把这个数据进行HASH摘要算法,然后CA公司有自己的私钥,拿着这个私钥把摘要进行RAS加密,加密后的数据就是签名。因此证书就是明文公钥等其他信息,加上CA公司用他们自己私钥签名的一个文件。详细可以看上面的证书图
证书验证过程
SSL握手
首先明白网络各层的协议和作用,可以参考文章头部的链接。SSL握手是发生在TCP三次握手之后的
第一阶段:Clien