首页 > 编程知识 正文

HTTP与HTTPS协议区别,https转换http

时间:2023-05-04 15:45:34 阅读:52420 作者:2436

一、前言:

先看看这两张图吧。 第一张访问域名http://www.12306.cn,谷歌浏览器提示不安全链接,第二张为https://kyfw.12306.cn/OTN/regist/init,浏览器安全为什么可以这样做呢? 2017年1月发布的Chrome 56浏览器现在将收集密码和信用卡数据的HTTP页面标记为“不安全”。 此外,如果用户使用2017年10月推出的Chrome 62,则包含输入数据的HTTP页面和以无痕迹模式浏览的所有HTTP页面都将被标记为“不安全”。 此外,苹果公司在2017年1月强制所有iOS App

二、HTTP和HTTPS的发展历史HTTP是什么? 超文本传输协议是基于请求和响应、无状态、APP应用层的协议,是经常基于TCP/IP协议传输数据且在互联网上使用最广泛的网络协议HTTP旨在提供一种公开和接收HTML页面的方法。

发展历史:

版本发生时间内容的发展现状HTTP/0.91991年不涉及数据包传输,规定了客户端和服务器之间的通信格式,只有GET请求在正式的标准HTTP/1.01996年没有限制为传输内容格式DELETE命令是标准HTTP/1.11997年持久连接、长连接、带宽节约、HOST域、管道机制、块传输代码到2015年最广泛的HTTP/22015年复用、服务器推送、报头信息压缩和

该Akamai公司设立的官方演示显示,使用HTTP/1.1和HTTP/2同时要求379张图像,观察要求时间,HTTP/2的性能具有优势。

复用:在一个HTTP/2连接请求中触发多个请求-响应消息,多个请求流共享一个TCP连接,从而实现多个挂起并行处理,而不是建立多个TCP连接。

HTTP消息格式

什么是HTTPS? 在《图解HTTP》一书中,HTTPS说它是一个戴着SSL外壳的HTTP。 HTTPS是一种通过计算机网络进行安全通信的传输协议,通过HTTP进行通信,利用SSL/TLS建立全通道,对数据包进行加密。 HTTPS的主要目的是提供web服务器认证,同时保护交换数据的隐私和完整性。

PS:TLS是传输层加密协议,前身为SSL协议,由网景公司于1995年发布。 根据情况,两者不区分。

参考连接: 1.https://kamran Ahmed.info/blog/2016/08/13/http-in-depth /

2.https://en.Wikipedia.org/wiki/hypertext _ transfer _ protocol

3.https://tools.IETF.org/html/RFC 1945

4.https://http2. github.io/http2- spec /

5.https://www.zhi Hu.com/question/34074946

三、HTTP VS HTTPS HTTP特点:无状态:协议在客户端没有状态存储,在处理事情上没有“记忆”能力。 例如,要访问一个网站,必须重复登录操作,使其不连接。 HTTP/1.1以前,由于无状态的特点,每次请求都需要通过TCP握手3次并挥手4次,与服务器重新建立连接。 例如,如果一个客户端在短时间内多次请求相同的资源,则服务器不能区分是否已经对用户的请求进行了响应,因此每次都需要重新响应请求,并且消耗不必要的时间和流量。 基于请求和响应:在基本特性上,客户端发起请求,服务端响应简单快速,灵活通信使用明文,请求和响应未经通信方确认,无法保护数据完整性下面通过一个简单的抓包实验观察使用HTTP请求传输的数据:

结果分析: HTTP协议传输数据明文显示无状态的几种解决方案:场景:电商用户使用时间长,需要保存用户一段时间的HTTP通信状态。 例如,一旦执行登录操作,30分钟内所有请求都不需要再次登录。 Cookie/Session技术http/1.1持久连接(http keep-alive )方法保持TCP连接状态,除非任何一端明确提出断开。 请求报头字段的连接: keep-alive基于持久性连接

通过抓住数据包,可以看到数据没有以明文传输。 此外,HTTPS还具有以下特点:

内容加密:由于采用了混合加密技术,中间人无法直接看到明文内容,验证客户端可以访问自己的服务器以保护数据的完整性。 防止传输的内容被中间人冒充或篡改。 **混合加密: **将不对称加密和对称加密技术结合起来。 由于客户机使用对称加密生成密钥加密发送数据,使用非对称加密的公开密钥加密秘密密钥,所以在网络上发送的数据是用秘密密钥加密的密文和用公开密钥加密的秘密密钥,即使被黑客攻击也没有秘密密钥,因此加密的明文的秘密密钥

*数字摘要: **如果用单向散列函数散列原文

需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。


**数字签名技术:**数字签名建立在公钥加密体制基础上,是公钥加密技术的另一类应用。它把公钥加密技术和数字摘要结合起来,形成了实用的数字签名技术。

收方能够证实发送方的真实身份;发送方事后不能否认所发送过的报文;收方或非法者不能伪造、篡改报文。

非对称加密过程需要用到公钥进行加密,那么公钥从何而来?其实公钥就被包含在数字证书中,数字证书通常来说是由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,证书中包含了一个密钥对(公钥和私钥)和所有者识别信息。数字证书被放到服务端,具有服务器身份验证和数据传输加密功能。

四、HTTP通信传输

客户端输入URL回车,DNS解析域名得到服务器的IP地址,服务器在80端口监听客户端请求,端口通过TCP/IP协议(可以通过Socket实现)建立连接。HTTP属于TCP/IP模型中的运用层协议,所以通信的过程其实是对应数据的入栈和出栈。

报文从运用层传送到运输层,运输层通过TCP三次握手和服务器建立连接,四次挥手释放连接。

为什么需要三次握手呢?为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

比如:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段,但是server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求,于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了,由于client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据,但server却以为新的运输连接已经建立,并一直等待client发来数据。所以没有采用“三次握手”,这种情况下server的很多资源就白白浪费掉了。

为什么需要四次挥手呢?TCP是全双工模式,当client发出FIN报文段时,只是表示client已经没有数据要发送了,client告诉server,它的数据已经全部发送完毕了;但是,这个时候client还是可以接受来server的数据;当server返回ACK报文段时,表示它已经知道client没有数据发送了,但是server还是可以发送数据到client的;当server也发送了FIN报文段时,这个时候就表示server也没有数据要发送了,就会告诉client,我也没有数据要发送了,如果收到client确认报文段,之后彼此就会愉快的中断这次TCP连接。

五、HTTPS实现原理

SSL建立连接过程

client向server发送请求https://baidu.com,然后连接到server的443端口,发送的信息主要是随机值1和客户端支持的加密算法。server接收到信息之后给予client响应握手信息,包括随机值2和匹配好的协商加密算法,这个加密算法一定是client发送给server加密算法的子集。随即server给client发送第二个响应报文是数字证书。服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。传送证书,这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。客户端解析证书,这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值(预主秘钥)。客户端认证证书通过之后,接下来是通过随机值1、随机值2和预主秘钥组装会话秘钥。然后通过证书的公钥加密会话秘钥。传送加密信息,这部分传送的是用证书加密后的会话秘钥,目的就是让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥。服务端解密得到随机值1、随机值2和预主秘钥,然后组装会话秘钥,跟客户端会话秘钥相同。客户端通过会话秘钥加密一条消息发送给服务端,主要验证服务端是否正常接受客户端加密的消息。同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端能够正常接受的话表明SSL层连接建立完成了。

问题:
1.怎么保证保证服务器给客户端下发的公钥是真正的公钥,而不是中间人伪造的公钥呢?


2.证书如何安全传输,被掉包了怎么办?

数字证书内容
包括了加密后服务器的公钥、权威机构的信息、服务器域名,还有经过CA私钥签名之后的证书内容(经过先通过Hash函数计算得到证书数字摘要,然后用权威机构私钥加密数字摘要得到数字签名),签名计算方法以及证书对应的域名。

验证证书安全性过程

当客户端收到这个证书之后,使用本地配置的权威机构的公钥对证书进行解密得到服务端的公钥和证书的数字签名,数字签名经过CA公钥解密得到证书信息摘要。然后证书签名的方法计算一下当前证书的信息摘要,与收到的信息摘要作对比,如果一样,表示证书一定是服务器下发的,没有被中间人篡改过。因为中间人虽然有权威机构的公钥,能够解析证书内容并篡改,但是篡改完成之后中间人需要将证书重新加密,但是中间人没有权威机构的私钥,无法加密,强行加密只会导致客户端无法解密,如果中间人强行乱修改证书,就会导致证书内容和证书签名不匹配。

那第三方攻击者能否让自己的证书显示出来的信息也是服务端呢?(伪装服务端一样的配置)显然这个是不行的,因为当第三方攻击者去CA那边寻求认证的时候CA会要求其提供例如域名的whois信息、域名管理邮箱等证明你是服务端域名的拥有者,而第三方攻击者是无法提供这些信息所以他就是无法骗CA他拥有属于服务端的域名。

六、运用与总结 安全性考虑: HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行

中间人攻击(MITM攻击)是指,黑客拦截并篡改网络中的通信数据。又分为被动MITM和主动MITM,被动MITM只窃取通信数据而不修改,而主动MITM不但能窃取数据,还会篡改通信数据。最常见的中间人攻击常常发生在公共wifi或者公共路由上。

成本考虑: SSL证书需要购买申请,功能越强大的证书费用越高SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用)。根据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。HTTPS连接缓存不如HTTP高效,流量成本高。HTTPS连接服务器端资源占用高很多,支持访客多的网站需要投入更大的成本。HTTPS协议握手阶段比较费时,对网站的响应速度有影响,影响用户体验。比较好的方式是采用分而治之,类似12306网站的主页使用HTTP协议,有关于用户信息等方面使用HTTPS。

最后插播下广告,对IOS感兴趣的或者校招同学可以看这两篇文章-:
看一篇就够入门Objective-C
手把手教学IOS自定义cell-仿微信消息列表
面试必备操作系统

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。