HTTP协议默认是明文传输,存在一定的安全隐患,容易被中间人窃听和攻击,在 加密解决HTTP协议带来的安全问题 中提到使用哈希、对称加密、非对称加密等方式对数据加密,能解决数据安全的问题。

以上加密方式需要我们手动的使用加密算法对数据进行处理,如果觉得自己制定加密规则比较麻烦,可以使用统一的数据安全解决方法:HTTPS(超文本传输安全协议)。

HTTP和HTTPS在浏览器的表现

在浏览器中输入 HTTP 的url,如果该网站存在 HTTPS 地址,会直接跳转 HTTPS

TLS/SSL

HTTPS 是在 HTTP 的基础上使用 SSL/TLS 来加密报文,对窃听和中间人攻击提供合理的防护。

TLS(传输层安全性协议)的前身是 SSL(安全套接层),工作在【应用层】和【传输层】之间。所以 HTTPS 通信过程比 HTTP 多一个 TLS 连接的步骤,总共有三步

  • TCP的三次握手
  • TLS/SSL的连接
  • HTTP请求和响应

TLS连接

TSL 连接大概存在以下步骤,每一步请求都存储着连接相关的数据,其中省略了服务器返回的部分确认消息,这里使用的是密钥交换算法 ECDHE,不同的密钥交换算法,流程存在差异。

具体流程

  1. client hello

    传递:TSL的版本、支持的加密套件(Cipher suit)、随机数 服务器会给回确认ACK
  2. server hello

    传递:TLS的版本、选择的加密的套件(从接收到的客户端加密套件中选择)、随机数
  3. Certificate

    传递:服务器的公钥证书
  4. Server Key Exchange

    用以实现ECDHE算法的其中一个参数(Server Params) ECDHE是一种密钥交换算法,为了防止伪造,Server Params经过了服务器私钥签名
  5. Sever Hello Done

    告知客户端,协商部分结束 前5步明文共享了:Client Random、Server Random、Server Params,客户端也已经拿到了服务器的公钥证书,接下来,客户端会验证证书的真实有效性
  6. Client Key Exchange

    用以实现ECDHE算法的另一个参数(Client Params) 目前为止,客户端和服务器都拥有了ECDHE算法需要的2个参数:Server Params、Client Params,可通过他们计算出一个新的随机密钥串:Pre-master secret,然后结合Client Random、Server Random、Pre-master secret生成一个主密钥,最后利用主密钥衍生出其他密钥:客户端发送用的会话密钥、服务器发送用的会话密钥等
  7. Change Cipher Spec

    告知服务器:之后的通信会采用计算出来的会话密钥进行加密
  8. Finished(在wireshark中看到的是Encrypted Handshake Message)

    包含连接至今全部报文的整体校验值(摘要),加密(用第六步结束时生成的会话密钥)之后发送给服务器 服务器->客户端
  9. Change Cipher Spec

    告知客户端:之后的通信会采用计算出来的会话密钥进行加密
  10. Finished(在wireshark中看到的是Encrypted Handshake Message)

    到此为止,客户端服务器都验证加密解密没问题,握手正式结束。后面开始传输加密的HTTP请求和响应 Application Data 最终的加密内容

第八步是通过服务器验证客户端的密钥,第九步和第十步通过客户端验证服务器的密钥,从wireshark抓包看到的数据就像这样

基于以上加密、制定密钥的方式,使得HTTP协议发送的数据更为安全。

HTTPS的成本

HTTPS虽然安全可靠,但它相比HTTP需要更多的成本,比如:证书的费用,加密解密计算,访问速度变慢。

并且有些历史页面多年未改动,数据也不敏感,花费时间重构从成本上来说并无必要,所以企业的处理方式为:包含敏感数据的请求才使用HTTPS,其他保持使用HTTP(比如首页都用HTTP,登录等操作使用HTTPS)。

以上就是HTTPS相关介绍。更多有关 前端网络协议 的内容可以参考我其它的博文,持续更新中~

HTTPS 是这样握手的的更多相关文章

  1. Http和Https三次握手那些事

    今天我总结了什么是HTTP三次握手,还有HTTPS握手的过程以及为什么HTTPS是安全的. 一:HTTP与TCP/IP区别? --->TPC/IP协议是传输层协议,主要解决数据如何在网络中传输 ...

  2. HTTPS和SSL握手过程(转载)

    https介绍 HTTPS = HTTP + 一组对称.非对称和基于证书的加密技术 HTTPS是最常见的HTTP安全版本.它得到了很广泛的应用,所有主要的商业浏览器和服务器都提供HTTPS.HTTPS ...

  3. 使用Wireshark查看HTTPS中TLS握手过程

    通过使用Wireshark抓包分析TLS握手的过程,可以更容易理解和验证TLS协议,本文将先介绍Wireshark解密HTTPS流量的方法,然后分别验证TLS握手过程和TLS会话恢复的过程. 一.使用 ...

  4. https 三次握手

    1,客户端输入https网址,链接到server443端口: 2,服务器手中有一把钥匙和一个锁头,把锁头传递给客户端.数字证书既是公钥,又是锁头 3,客户端拿到锁头后,生成一个随机数,用锁头把随机数锁 ...

  5. nginx做正向代理https遇到SSL_do_handshake()握手失败

    SSL_do_handshake() failed (SSL: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number) wh ...

  6. https握手失败案例(一)

      OkHttpClient okHttpClient = new OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .read ...

  7. 全站 HTTPS 来了

    !版权声明:本文为腾讯Bugly原创文章,转载请注明出处腾讯Bugly特约作者:刘强 最近大家在使用百度.谷歌或淘宝的时候,是不是注意浏览器左上角已经全部出现了一把绿色锁,这把锁表明该网站已经使用了 ...

  8. 全站 HTTPS 来了(转载)

    转载:本文为腾讯Bugly原创文章. 最近大家在使用百度.谷歌或淘宝的时候,是不是注意浏览器左上角已经全部出现了一把绿色锁,这把锁表明该网站已经使用了 HTTPS 进行保护.仔细观察,会发现这些网站已 ...

  9. HTTPS基本原理

    HTTPS基本原理 Xcode7上,默认采用的传输协议就是HTTPS,大家都知道HTTPS = HTTP + SSL,利用HTTPS协议传输的数据是加密的,更加安全.在此对概念性知识不再介绍.直接介绍 ...

  10. 【转贴】全站 HTTPS 来了

    http://geek.csdn.net/news/detail/48765 作者:腾讯TEG架构平台部静态加速组高级工程师 刘强 最近大家在使用百度.谷歌或淘宝的时候,是不是注意浏览器左上角已经全部 ...

随机推荐

  1. C#使用词嵌入向量与向量数据库为大语言模型(LLM)赋能长期记忆实现私域问答机器人落地

    本文将探讨如何使用c#开发基于大语言模型的私域聊天机器人落地.大语言模型(Large Language Model,LLM 这里主要以chatgpt为代表的的文本生成式人工智能)是一种利用深度学习方法 ...

  2. #Python实例 计算外卖配送距离(基于经纬度的导航及直线距离)

    一:X-MIND 二:计算两点经纬度之间的距离 经纬度是利用三维球面空间来描述地球上一个位置的坐标系统,每个经纬度坐标由经度 lng 和纬度 lat 两个分量组成.经纬度的有效范围为经度-180度到+ ...

  3. 2023-04-04:使用 Golang 和 ffmpeg-go 库实现 demuxing_decoding.c,轻松掌握音视频分离解码技巧。

    2023-04-04:使用 Golang 和 ffmpeg-go 库实现 demuxing_decoding.c,轻松掌握音视频分离解码技巧. 答案2023-04-05: 使用github/moonf ...

  4. 2020-12-07:go中,slice的底层数据结构是什么?

    福哥答案2020-12-07: 源码位于runtime/slice.go文件中的slice结构体. type slice struct { array unsafe.Pointer len int c ...

  5. 【工作随手记】并发之synchronized

    synchronized对于java同学肯定都是耳熟能详的必修课了.但是不管对于新手还是老手都有一些容易搞错的点.这里权做一点记录. 锁的是代码还是对象? 同步块一般有两种写法. 1是直接加以方法体上 ...

  6. 记一次,使用python实现一键在爱发电发布带图片的动态

    1.背景 本人喜欢转载一些youtube上的视频到b站上面,然后就会有些观众想要视频的封面,那我总不可能一个一个发吧,太麻烦了.故打算将资源发布到爱发电上面.但是爱发电却没有公开对应的api,只能自己 ...

  7. pycham2022最新破解

    pycharm破解方式常见有2种: 1 .破解插件+激活码,一般激活到2099年或者2089年! 2 .破解插件.该破解插件可以无限重置30天,也就是pycharm永远有30天的试用期,永不到期!   ...

  8. Java笔试真题及参考答案

    题目 使用Swing实现一个窗口程序,窗口包括一个菜单栏,请按以下要求实现相应功能. (1)窗口标题为"GUI程序",大小为400X300, 居中显示:窗口上有一个面板,面板背景色 ...

  9. MySQL中字符串查询效率大比拼

    背景 最近有个同事对字符串加索引,加完后,发现多了个奇奇怪怪的数字执行的SQL如下: alter table string_index_test add index `idx_name` (`name ...

  10. 【Python】如何在FastAPI中使用UUID标记日志,以跟踪一个请求的完整生命周期

    为什么要使用uuid标记日志? 在分布式系统中,一个请求可能会经过多个服务,每个服务都会生成自己的日志.如果我们只使用普通的日志记录,那么很难将这些日志串联在一起,以至难以跟踪一个请求的完整生命周期. ...