zoukankan      html  css  js  c++  java
  • web基础系列(五)---https是如何实现安全通信的

    https是如何实现安全通信的

    如果有不正确的地方,还望指出!

    web基础系列目录

    回顾

    总结几个概念(具体描述可以看上一篇文章)

    数字签名和数字证书的应用

    • 场景是这样的:rose给jiajun写情书
    • 刚开始用非对称加密的方式,rose用jiajun的公钥对情书进行加密,那么这样的话,如果Billy截获到情书,也无法对情书进行解密,因为只有jiajun有私钥,除非私钥泄露了
    • jiajun收到,要回信给rose,这个时候jiajun要证明这封信是他自己写的,而且中途没有被别人修改
    • 这个时候,jiajun将信进行摘要,然后对摘要用私钥进行加密,这就是一个数字签名,然后我将数字签名和信一起发送给rose
    • rose接到后,用公钥对数字签名进行解密,得到的是一个摘要(这个时候不知道有没有被人修改过),然后对信进行摘要,这样的话,对两个摘要进行比较,如果不同那么说明这封信被修改过。
    • 后来,Billy想冒充jiajun(让rose和jiajun分手),他把jiajun的公钥换成他自己的公钥,然后按照上面的一样的操作发送给rose。这样Billy就可以得手
    • 再后来,为了不让Billy得逞,jiajun想出一个方法,要解决这个问题就是要向rose确定这个公钥是否是jiajun的,所以jiajun去找证书中心(CA),为公钥做认证,证书中心用自己的私钥对公钥和一些相关中心进行加密,这样产生的就是数字证书
    • 那么以后,jiajun发送消息给rose的时候,就将数字签名和数字证书发送个rose,这样rose通过数字证书就可以得到真实的公钥,就可以通过数字签名判断是否更改过

    https的安全通信

    SSL/TLS

    • SSL(Secure Sockets Layer安全套接层),是一种网络安全协议
    • TLS(Transport Layer Security传输层安全协议),是基于SSL协议的通用化协议,正逐步替代SSL。
    • SSL/TLS分为两层,一层是记录协议(建立在可靠的传输协议上(比如tcp),提供数据封装,加密解密,数据建议等基本功能),一层是握手协议(建立在记录协议上,在实际的数据传输开始前,进行加密算法的协商,通信密钥的交换等)。

    什么是https

    • 全称是hypertext protocol over secure socket layer,也就是基于ssl的http协议,http的安全版,可以理解为https=http+ssl
    • https支持单向认证(只验证服务端证书的有效性),也支持双向验证(既验证服务端证书的有效性也验证客户端证书的有效性)
    • https协议在http协议与tcp协议之间增加一层安全层,数据在网络传输之前,会先进行加密,再进行传输

    为什么用https

    • 有时候,我们访问一个国外的http站点,发现下面会有国内的一些小广告,事实上是中间人(一些网络节点,比如wifi热点,路由器,防火墙等)劫持,在html注入了一段广告的html。而只是注入广告的话还只是小问题,如果有一些有一些重要的信息被抓取的话,那么问题就挺严重的
    • 打个比喻,http是三轮车,没有封闭,里面装的什么东西可以被看到,https是封闭的汽车,看不到里面装了什么

    https功能

    • 内容加密,用对称密钥进行加密
    • 身份认证,数字证书验证身份

    https协商过程

    • 浏览器向服务器发出请求
    • 服务器响应浏览器,将证书发送给浏览器,浏览器确认证书有效
    • 浏览器和服务器通过非对称密钥算法协商好对话密钥(用于对称加密)
    • 后面双方都使用对话密钥做对称加解密就能完成整个通信
    • 总的来说,通信内容用对称加密算法机密,而对称加密的加密密钥通过非对称加密协商

    握手过程(以RSA密钥协商为例,不同的算法实现不一样)

    • 客户端发送消息,消息包含协议的版本信息,客户端支持的加密算法,客户端产生的随机数
    • 服务端响应消息,消息包括服务端产生的随机数,协议版本信息,服务端数字证书,从客户端提供的加密算法确认使用的加密算法
    • 客户端根据证书管理器,验证服务端证书(验证有效期,证书中的域名和浏览器中域名是否匹配等)的有效性
    • 验证通过后,从证书获取公钥,生成随机数,此时通过这3个随机数经过一定的算法生成一个对话密钥,然后发送随机数(用证书的公钥进行加密),
    • 服务器端用私钥解密第三个随机数,然后通过3个随机数计算生成对话密钥
    • 握手阶段结束,客户端和服务端进入加密通信,用对话密钥加密内容

    https的性能问题

    • 对比http,我们多了一个ssl握手的过程,而这个过程,有对称加密和非对称加密的过程,那么自然会消耗cpu资源了

    用故事总结本文内容

    • 场景一样,同样是rose给jiajun写情书
    • rose和jiajun协商好用对称加密的方式给情书加密,可是现在有一个问题对称密钥怎么解决,无法安全地生成和保管对称密钥
    • 于是jiajun想了办法,jiajun生成一对公钥和私钥,公钥是公开的,于是rose生成一个用于对称加密的对话密钥,然后用公钥加密这个对话密钥,那么这样的话,即使中间lBilly截获了这部分内容,因为对话密钥很安全,所以无法获取内容
    • Billy很聪明,想到一个方法,伪装成jiajun,把他的公钥给rose,此时非对称协商密钥协商的对象是Billy
    • jiajun也不笨,很快他发现问题,要解决这个问题根本上就是要向rose证明这个公钥是谁的。于是jiajun找到了认证中心CA,生成一份数字证书

    我觉得分享是一种精神,分享是我的乐趣所在,不是说我觉得我讲得一定是对的,我讲得可能很多是不对的,但是我希望我讲的东西是我人生的体验和思考,是给很多人反思,也许给你一秒钟、半秒钟,哪怕说一句话有点道理,引发自己内心的感触,这就是我最大的价值。(这是我喜欢的一句话,也是我写博客的初衷)

    作者:jiajun 出处: http://www.cnblogs.com/-new/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。

  • 相关阅读:
    out/host/linuxx86/obj/EXECUTABLES/aapt_intermediates/aapt 64 32 操作系统
    linux 查看路由器 电脑主机 端口号 占用
    linux proc进程 pid stat statm status id 目录 解析 内存使用
    linux vim 设置大全详解
    ubuntu subclipse svn no libsvnjavahl1 in java.library.path no svnjavahl1 in java.library.path no s
    win7 安装 ubuntu 双系统 详解 easybcd 工具 不能进入 ubuntu 界面
    Atitit.json xml 序列化循环引用解决方案json
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    Atitit.跨语言  文件夹与文件的io操作集合  草案
    Atitit.atijson 类库的新特性设计与实现 v3 q31
  • 原文地址:https://www.cnblogs.com/-new/p/7663746.html
Copyright © 2011-2022 走看看