码迷,mamicode.com
首页 > Web开发 > 详细

https原理

时间:2018-07-22 15:08:23      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:mon   efault   服务   before   100%   spl   需要   special   相同   

https原理

小白向,大神勿喷

  • 非对称加密:对于理解https的内容,可以简单理解为,是一对钥匙,分为公钥和私钥,只有这个公钥可以解开这个私钥加密的信息,也只有这个私钥可以解开这个公钥加密的信息,没其他钥匙什么事。公钥可以全世界公开,但是密钥只有自己单位知道,绝不泄露到网上。
  • 企业有一对公私钥,这个公私钥,需要让第三方机构公证,公证这对钥匙真实可靠,这个第三方机构就是CA机构
  • CA机构负责给企业颁发证明其公私钥有效的证书。同时,CA机构自己也有一对公私钥。
  • CA机构的公钥已经安装到了每台客户端机器上,windows啊,macos啊都有,这个是操作系统默认带的,可以用CA的公钥解开CA的私钥加密的信息。
  • 证书上的信息有:企业的公钥,证书签名,构造签名的算法等,证书签名和签名算法用于证明证书不是伪造的。因为构造签名算法的过程中,用了CA的密钥和证书的指纹(整个证书内容的哈希),想要证明证书的有效性,客户端只需用证书提供的签名算法,加上CA的公钥即可解开,那也就是说全世界拿到这个证书,都能解开证书的内容,都看到证书的指纹。
  • 客户端会重新计算证书的指纹(哈希), 如果跟证书上的指纹一致,就证明证书有效,但是证书上的内容如果别人篡改了,因为篡改者不知道CA的密钥,所以它就算弄了个签名,客户端用CA的公钥也解析不出签名,所以在不知道CA密钥的情况下,篡改证书信息是无效的。
  • 如果客户端验证证书有效,就向服务端发送一段随机值字符,服务端用公司的私钥加密,并返回,客户端用公司的公钥解析,发现跟自己之前发送的随机值相同,就认可服务端的身份。
  • 客户端向服务端发送对称加密的加密方法和密钥,用服务端的公钥加密,服务端收到后用自己的私钥解密,之后的数据传输,就用这个对称加密的加密方法和密钥来加密。

明白了证书的验证过程,https的流程也就差不多弄明白了:

  1. 客户端向服务端发送请求;
  2. 服务端向客户端发送证书,该证书的签名是用CA的私钥加密的;
  3. 客户端用CA的公钥,验证证书的有效性,如果证书有效,就发送给服务端一段随机值,让服务端用私钥加密,这个过程主要是验证服务端有没有证书所示的公钥对应的私钥,因为证书可以被劫持,但是私钥不能,如果黑客劫持了服务端的证书,冒充服务端,它的证书验证,也是会通过的,只是它的致命缺点就是它没有服务端的私钥,如果服务端用私钥加密后的随机值返回到客户端,能正确被证书里的公钥解析出跟之前相同的字符串,那就证明我们与之沟通的那个服务端是个真货,有私钥。
  4. 经过了上述的验证之后,客户端就放心的用证书上的公钥加密以下信息:对称加密的密钥和对称加密的方法,发给服务端,注意,“对称加密的密钥”跟前面的公钥私钥之流毫无关系,不要弄混了。
  5. 服务端用它的密钥解析出”对称加密的密钥和对称加密的方法“,之后和客户端的通讯,就完全采用对称加密来做,因为对称加密双方解析速度快,劫持者不知道密钥,同样也无法破解。

至此,https的流程,大家应该清楚了。不清楚的欢迎留言拍砖。

https原理

标签:mon   efault   服务   before   100%   spl   需要   special   相同   

原文地址:https://www.cnblogs.com/becker/p/9349894.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!