HTTP与HTTPS区别 + HTTPS协议简介
一、Http协议的优点与缺点
前言:
什么是HTTP?
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
HTTP发展历史?
HTTP/1.1与HTTP/2对比?
1、性能优势:使用HTTP/1.1和HTTP/2同时请求服务器资源,观察请求的时间,明显看出HTTP/2性能占优势。
2、多路复用:通过单一的HTTP/2连接请求发起多重的请求-响应消息,多个请求stream共享一个TCP连接,实现多留并行而不是依赖建立多个TCP连接。
1.1、HTTP协议的优点
1.1.1:效率高
限制每个连接只有一个请求的无连接状态,在服务器处理完客户的请求,并收到客户的反应,即断开,通过这种方式可以节省传输时间。
1.1.2: 简单快速
当服务器客户端请求服务时,只需传送请求方法和路径。请求方法常用的GET,HEAD,POST。每种方法规定了客户端与服务器联系的是不同的类型。因为简单的 HTTP 协议,通信速度很快。
1.1.3: 灵活
HTTP 允许任何类型的数据对象的传输,在数据传输时对被传输的内容类型进行标记。(请求头中的Content-Type字段)
1.1.4:无状态
HTTP 协议是无状态的协议,没有协议的事务处理和存储能力。【协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作】
1.2、HTTP协议的缺点
1.2.1:数据明文传输
有被窃听的风险,Http通信使用明文,传输过程中没有任何的保证措施,可能会被窃听。
1.2.2:数据传输期间无身份校验
在传输过程中,不验证通信方的身份,这中间就有可能被遭遇伪装。
1.2.3:数据传输不校验报文完整性
HTTP只是对报文进行了解析,并没有对其进行完整的校验,所以无法验证报文的完整性,可能被遭篡改
1.24:无连接
HTTP/1.1版本之前(1.1之前的版本没有长连接这一特性),由于无状态特点,导致每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
1.3、HTTP报文格式
二、Https协议的特点
2.1、HTTPS简介
HTTPS并不是一个崭新的协议,而是在HTTP的基础上发展而来,意为HTTP Secure。相当于是HTTP的升级版。
它主要是为了解决HTTP协议安全性不足的问题而诞生的。在使用HTTPS之后,访问浏览器的时候前缀由HTTP变为HTTPS。现在我们看到网站都采用HTTPS的协议比比皆是,比如:如下都是https的网站:
2.2、HTTP+加密+认证+完整性保护 = HTTPS
HTTPS的通信端口由SSL和TSL代替了,它是一种应用层协议。一般的情况下HTTP直接和TCP进行通信,当使用了SSL之后,就会变成先和SSL通信,SSL再和Tcp进行通信。
原理图如下:
当采用了SSL协议之后,Http协议就具备了加密、证书、完整性保护三大功能,SSL是独立于HTTP存在的,它是现存的广泛使用的网络安全技术。
三、HTTPS协议采用的加密技术
3.1、SSL采用的加密技术
3.1.1:对称密钥加密
SSL采用的加密技术叫做“共享密钥加密”,也叫作“对称密钥加密”。
这种加密方法是这样的:比如客户端向服务器发送一条信息,首先客户端会采用已知的算法对信息进行加密,比如MD5或者Base64加密;
然后接收端对加密的信息进行解密的时候需要用到密钥,中间会传递密钥,(加密和解密的密钥是同一个),密钥在传输中间是被加密的。
这种方式看起来安全,但是仍有潜在的危险,一旦被窃听,或者信息被挟持,就有可能破解密钥,而破解其中的信息。因此“共享密钥加密”这种方式存在安全隐患:
3.3.2:非对称密钥加密
非对称加密方式使用的时候有两把锁,一把叫做“私有密钥”,一把是“公开密钥”。
使用非对称加密的加密方式的时候,服务器首先告诉客户端按照自己给定的公开密钥进行加密处理,客户端按照公开密钥加密以后,服务器接收到客户端传输过来的信息再通过自己的私有密钥进行解密。
这样做的好处就是解密的钥匙根本就不会进行传输,因此也就避免了被挟持的风险。就算公开密钥被窃听者拿到了,它也很难进行解密。
但是因为解密过程是对离散对数求值,这可不是轻而易举就能做到的事。以下是非对称加密的原理图:
四、HTTPS的安全通信机制
4.1、非称加密方式的缺点
公开密钥加密固然比共享密钥加密的方式提升了一个档次,但是它也存在两个问题:
①如何保证接收端向发送端发出公开秘钥的时候,发送端确保收到的是预先要发送的,而不会被挟持或更改。但是只要是发送密钥,就有可能有被挟持的风险。
②非对称加密的方式效率比较低,它处理起来更为复杂,通信过程中使用就有一定的效率问题而影响通信速度。
4.2、HTTPS采用混合机制的加密方式
HTTPS则综合了公开密钥加密和共享密钥加密的两种方式,充分利用两者的优势;
在最初的连接的时候使用非对称密钥的加密方式保证连接的安全性;【服务端与客户端刚建立有效连接的时候,依旧采用公钥加密,私钥解密的非对称加密方式进行数据传输】
之后的稳定的通讯(服务端与客户端之间的数据传输)采用对称加密的方式。但是前提条件稳定的通讯是指确保客户端和服务端交换的密钥是安全的。
4.3、HTTPS的证书机制(CA证书)
在4.1中我们讲了非对称加密的缺点,其中第一个就是在非对称加密方式中公钥很可能存在被挟持的情况,无法保证客户端收到的公开密钥就是服务器发行的公开密钥。
此时就引出了公开密钥证书机制。数字证书认证机构是客户端与服务器都可信赖的第三方机构。
证书的具体传播过程如下:
①服务器的开发者携带公开密钥,向数字证书认证机构提出公开密钥的申请。
②数字证书认证机构在认清申请者的身份,审核通过以后,会对开发者携带的公开密钥做数字签名。
③然后将分配这个已签名的公开密钥,并将密钥放在证书里面,既将密钥与证书绑定在一起。如下图:
④在服务端和客户端在建立有效的链接时,服务器将这份数字证书(此时的数字证书包含公开密钥)发送给客户端,因为客户端也认可证书机构,所以客户端可以通过数字证书中的数字签名来验证公钥的真伪,以确保服务器传过来的公开密钥是真实的。【一般情况下,证书的数字签名是很难被伪造的,这取决于认证机构的公信力。】
⑤一旦客户端确认CA证书信息无误之后,客户端就会通过证书中的公钥对报文进行加密发送,服务器接收到客户端请求的加密数据后用自己的私钥进行解密。
4.4、关于客户端证书
客户端证书是进行客户端认证的(服务端同样需要认证客户端以保证客户端的真实有效),证明服务器正在通信的客户端是安全的。【双向认证】
【当客户端向服务端发送了被公钥加密后的数据,同时也携带着客户端证书,然后服务器根据客户端证书验证客户端的存在】
但是使用客户端证书使用存在以下几个问题:
①使用客户端证书,客户得自己安装证书,客户端证书是需要进行付费购买的,且每张证书对应到用户意味着需要支付用户数量对等的费用,这叫给用户带来了间接的问题。
②客户端证书存在另一个问题是,客户端证书只能证明客户端的存在,而不能证明用户本人的真实有效。
五、为什么还有很多网站不使用HTTPS?
HTTPS既然如此安全可靠,为什么还有很多WEB网站不使用Https的协议?这其中的原因有以下几点:
①加密通信会消耗一定的cpu和服务器资源,如果每次通信都加密,然后对应的服务器在收到消息后解密,无疑会消耗更多的资源。
②如果所有的信息都采用HTTPS加密,这无疑是一种浪费。非敏感信息就算被窃取了,也无伤大雅。可以在其传输敏感信息的时候,采用HTTPS协议进行加密。
③购买证书的开销也是一笔很大的费用。向认证机构购买证书,证书价格会根据不同的认证机构略有不同,而一般的授权需要折合人民币600多元。
④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。
针对5.2举例:
类似12306网站的主页使用HTTP协议,有关于用户信息等方面使用HTTPS。
浏览器和服务器在基于HTTPS进行请求连接到数据传输过程中,用到哪些技术?
1、对称加密算法
用于对真正传输的数据进行加密。【对称加密算法代表通信双方使用同一套密钥对传输数据进行加密】
2、非对称加密
用于在握手过程中加密生成的密码。【公钥加密】
非对称加密算法会生成公钥和私钥,公钥只能用于加密数据,因此可以随意传输;而网站的私钥用于对数据进行解密,所以网站都会非常小心地保管自己的私钥,防止泄漏。
3、散列算法
用于验证数据的完整性。
4、数字证书
数据证书其实就是一个小的计算机文件,其作用类似于我们的身份证、护照,用于证明身份,在SSL中,使用数字证书来证明自己的身份。
客户端有公钥【此时的公钥是向服务器请求得到】,服务器有私钥,客户端用公钥对<对称密钥>进行加密【对称密钥存放于客户端(因为客户端与服务端通信,当客户端向服务端发起请求的时候,会带着客户端自己的加密规则<对称密钥>)】,将加密后的对称密钥发送给服务器,服务器用私钥对其进行解密,所以客户端和服务器可用对称密钥来进行通信。
非对称加密方式【即公钥和私钥】是用来加密和解密<对称密钥>;而对称加密方式【对称密钥】是用来加密数据;分别利用了两者的优点。