下面这篇文章叫做 HTTPS连接的前几毫秒发生了什么 ,是一篇译文,写得不错,十分有助于理解https。
http://blog.jobbole.com/48369/
下面的链接是百度文库的 数字证书的构成和原理 讲的不错!
摘抄几段重要的话:
一个公司想要在网络上标志自己的身份,可以向一个权威的CA中心购买证书。假如某公司A向某知名CA中心B购买证书,CA中心首先会去确认该公司的身份,确认完之后,会给该公司颁发一个数字证书(内容和上面的基本一致)。此外还会给公司一个证书公钥对应的私钥。 一个证书中比较关键的项目:
Public key 公钥 即该证书持有人的公钥
Thumbprint,Thumbprint algorithm
指纹以及指纹算法,在证书发布的时候,发布机构会根据指纹算法先计算出整个证书的hash值,并使用证书发布机构的私钥对其进行签名构成一个指纹,并将指纹与该证书放在一起。
看完文章,我简单地说以下理解,一般的https,就是在服务器上准备一个CA认证的证书,内部有自己的公匙,表明自己的身份。客户端利用此公匙加密接下来要使用的AES的密匙(用于加密真正的发送内容,速度快),这样确保AES的密匙能够安全到达服务器端,之后服务器会用自己的私匙得到AES秘匙。其实,AES的加密过程和证书是否经过CA认证无关,只要有个自己利用工具生成的证书就可以完成加密任务,CA认证真正的作用,就是为了保证网站的真实性。因为证书中包含一段由CA私匙加密过的数据(在证书里叫做签名,也就是signature),这段数据只有CA的公匙可以解密,而CA的公匙,名气超大,是提前安装在操作系统中的!CA公匙的安全和正确性,由操作系统维护,所以,如果系统能够正确解密,那么证书一定是CA发布的,也就确保了服务器的唯一身份!
在ios中和android中,如果访问的地址是https的,而且证书不是ca颁布的,那么会出现问题,无法访问,需要加入忽视证书错误的设置!比如使用afnetworking时manager.securityPolicy.allowInvalidCertificates = YES;