https加密通信流程解析

https其实是有两部分组成:http + SSL / TLS加密数据包,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

https比http要占用更多的资源,http使用TCP 三次握手建立连接,客户端和服务器需要交换3个包,https除了 TCP 的三个包,还要加上 ssl握手需要的9个包,所以一共是12个包。

SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。SSL最新的版本是3.0。TLS的全称是Transport Layer Security,即安全传输层协议,是建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。

SSL/TLS = 非对称加密(如RSA、ECC) + 对称加密(如AES、DES) + 散列算法(如MD5)

1.对数据加密 2.验证网站服务器身份


流程解析

客户端发起HTTPS请求

用户在浏览器里输入一个https网址,然后连接到server的443端口。

服务端的配置

采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

传送证书

这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

传送加密信息

这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

服务端解密信息

服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

传输加密后的信息

这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。

客户端解密信息

客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

  • GET / HEAD / OPTIONS方法
    只从服务端获取资源 并不对服务器进行修改 因此相对安全。 对于客户端来说是不安全的 请求参数会显示在URL中。

  • TRACE方法(两端安全) 用于诊断诊断服务器 仅记录路径信息 是安全的。

  • POST方法 会影响服务器端的资源。

说一下http和https

https的ssl加密是在传输层实现的。

  1. http 超文本传输协议,是一个客户端和服务端请求应答的标准。用于从www服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。

  2. 以安全为目标的http通道,简单讲就是http的安全版。即在http下加入ssl层,https的安全基础就是ssl,因此加密的详细内容就需要ssl。

为什么要用HTTPS?

因为HTTP在“裸奔”(明文传输,不安全)。

  • 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全
  • 对网站服务器进行真实身份认证

http和https的区别?

  1. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议,需要CA证书。

  2. 链接方式不同,对应的默认端口也不同,http 80,http 443端口。

  3. http无状态,https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

https协议的工作原理(双向加密建立)

客户端和服务端都有公钥和私钥。

  1. 客户端使用https url访问服务器,则要求web服务器建立ssl链接

  2. 服务端发送公钥

  3. 客户端发送’验证串+服务端公钥’ && 客户端公钥

  4. 服务端使用私钥取得验证串与客户端公钥一起发送给客户端

  5. 客户端使用客户端私钥来获取验证串是否匹配

协议解析

多了一个 upgrade-insecure-requests 的字段。该字段让页面打开后的请求自动变为 https。

缺点

  1. https握手阶段比较费时,会使页面加载时间延长,耗电增加

  2. https缓存不如http高效,会增加数据的开销

  3. ssl证书也需要花钱,功能越强大的证书费用越高

  4. ssl证书需要绑定IP,不能再同一个ip上绑定多个域名,Ipv4资源支持不了这样的消耗

本文结束感谢您的阅读

本文标题:https加密通信流程解析

文章作者:陈宇(cosyer)

发布时间:2018年07月25日 - 22:07

最后更新:2020年08月28日 - 00:08

原始链接:http://mydearest.cn/https%E5%8A%A0%E5%AF%86%E9%80%9A%E4%BF%A1.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!