赞
踩
HTTPS是在HTTP上建立SSL加密层,并对传输数据进行加密,是HTTP协议的安全版。HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了
(1)对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全;
(2)对网站服务器进行真实身份认证
通信使用明文(不加密),内容可能被窃听
由于HTTP本身不具备加密的功能,所以也无法做到对通信整体(使用HTTP协议通信的请求和响应的内容)进行加密。即,HTTP报文使用明文(指未经过加密的报文)方式发送。
HTTP明文协议的缺陷是导致数据泄露、数据篡改、流量劫持、钓鱼攻击等安全问题的重要原因。HTTP协议无法加密数据,所有通信数据都在网络中明文“裸奔”。通过网络的嗅探设备及一些技术手段,就可还原HTTP报文内容。
无法证明报文的完整性,所以可能遭篡改
所谓完整性是指信息的准确度。若无法证明其完整性,通常也就意味着无法判断信息是否准确。由于HTTP协议无法证明通信的报文完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。 换句话说,没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的。
不验证通信方的身份,因此有可能遭遇伪装
HTTP协议中的请求和响应不会对通信方进行确认。在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(但也仅限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下)
HTTP协议无法验证通信方身份,任何人都可以伪造虚假服务器欺骗用户,实现“钓鱼欺诈”,用户无法察觉。
数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
数据完整性:内容传输经过完整性校验
身份认证:第三方无法伪造服务端(客户端)身份
HTTP 1.1 引入 5 个特性
默认持久连接
HTTP/1.1 默认使用持久连接,TCP 连接默认不关闭,可以被多个请求复用。而 HTTP/1.0 默认使用短连接,要建立长连接, 可以在请求消息中声明 Connection:Keep-Alive。
** 管道机制**
客户端可以同时发送多个请求,而不用收到前一个响应之后再发出下一个请求,但服务器必须按照接收到客户端请求的先后顺序依次返回响应结果,以保证客户端能够区分出每次请求的响应内容
分块传输数据
HTTP/1.1 引入了分块传输方法。该方法使发送方能将消息实体分割为任意大小的组块,并发送它们。在每个组块前面,都加上了该组块的长度,使接收方可确保自己能够完整地接收到这个组块。最后发送方会发送长度为 0 的组块,表示消息发送完毕。
状态码 100 Continue
HTTP/1.1 加入了新的状态码 100 Continue,如果服务器因为权限拒绝了请求,就返回状态码 401;如果服务器接收此请求就返回状态码 100,客户端就可以继续发送带实体的完整请求了。
Host 域
在 HTTP1.0 中认为每台服务器都绑定一个唯一的 IP 地址,这个 IP 地址上只有一个主机。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且它们共享一个 IP 地址。所以 HTTP1.1 在请求消息头中多了一个 Host 域。
头部压缩
HTTP/2 会压缩头(Header)如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会 帮你消除重复的部分。
这就是所谓的 HPACK 算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表, 生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
二进制格式
HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,头信息和数据体都是 二进制,并且统称为帧(frame):头信息帧和数据帧。
数据流
HTTP/2 的数据包不是按顺序发送的,同一个连接里面连续的数据包,可能属于不同的回应。因此,必 须要对数据包做标记,指出它属于哪个回应。 每个请求或回应的所有数据包,称为一个数据流( Stream )。每个数据流都标记着一个独一无二的编 号,其中规定客户端发出的数据流编号为奇数, 服务器发出的数据流编号为偶数 客户端还可以指定数据流的优先级。优先级高的请求,服务器就先响应该请求。
HTTP/2 是可以在一个连接中并发多个请求或回应,而不用按照顺序一一对应。移除了 HTTP/1.1 中的串行请求,不需要排队等待,也就不会再出现「队头阻塞」问题,降低了延迟, 大幅度提高了连接的利用率。 举例来说,在一个 TCP 连接里,服务器收到了客户端 A 和 B 的两个请求,如果发现 A 处理过程非常耗 时,于是就回应 A 请求已经处理好的部分,接着回应 B 请求,完成后,再回应 A 请求剩下的部分。
HTTP/1.1 协议里设计 100 (Continue) HTTP 状态码的的目的是,在客户端发送 Request Message 之前,HTTP/1.1 协议允许客户端先判定服务器是否愿意接受客户端发来的消息主体(基于 Request Headers)。
即, 客户端 在 Post(较大)数据到服务端之前,允许双方“握手”,如果匹配上了,Client 才开始发送(较大)数据。
这么做的原因是,如果客户端直接发送请求数据,但是服务器又将该请求拒绝的话,这种行为将带来很大的资源开销。
协议对 HTTP客户端的要求是:如果 client 预期等待“100-continue”的应答,那么它发的请求必须包含一个 " Expect: 100-continue" 的头域!
浏览器与服务器之间将完成下列 7 个步骤:
ClientHello
首先,由客户端向服务器发起加密通信请求,也就是 ClientHello 请求。
SSL/TLS 协议版本, 客户端生产的随机数, 支持的密码套件列表
SeverHello
服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello 。
SSL/ TLS 协议版本, 随机数, 密码套件列表, 服务器的数字证书
客户端回应
客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的 真实性。
随机数, 加密通信算法改变通知, 把之前所有内容的发生的数据做个摘要,用来供服务端校验
服务器的最后回应
服务器收到客户端的第三个随机数( pre-master key )之后,通过协商的加密算法,计算出本次通信的 「会话秘钥」。
加密通信算法改变通知. 把之前所有内容的发生的数据做个摘要,用来供客户端校验。
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
200 OK 请求成功。一般用于GET与POST请求
3xx:重定向–要完成请求必须进行更进一步的操作。
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
4xx:客户端错误–请求有语法错误或请求无法实现。
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
5xx:服务器端错误–服务器未能实现合法的请求。
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理
HTTPS基于传输层,HTTP基于应用层;
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全 .
HTTP 的端口号是 80,HTTPS 的端口号是 443。
HTTPS在浏览器显示绿色安全锁,HTTP没有显示;
HTTPS在TCP与HTTP中间加入了一层SSL/TLS层, 保证了信息加密, 校验机制防止被篡改, 身份证书保证访问网页的真实性.
HTTPS在通信建立之前采用非对称加密的方式交换会话密钥, 后续就采用对称加密的方式进行加密数据
摘要算法用来保证数据信息的完整性, 客户端发送数据时, 会通过摘要算法算出数据的指纹信息, 并加入到数据中同时发送, 服务端采用同样的摘要算法进行计算指纹, 若两指纹信息相同, 则说明数据没有被修改
客户端需要得到服务器的公钥, 然后用公钥进行加密, 服务端得到数据后使用自己的私钥进行解密, 得到对称加密的密钥.
1.HTTP协议通过SSL外壳来实现安全性:
数据加密,SSL协议通过非对称秘钥的方式来完成秘钥的协商,然后通过对称密钥的加密方式来完成数据的加密
2.验证对方的身份:服务端和客户端都会向CA机构申请证书,在SSL握手阶段,会去确认证书的可信度,从而验证对方的身份,防止第三方冒充
3. 保证数据的完整性,每次数据都会加上MAC摘要并签名,接受的数据和发送的数据,如果摘要信息是一致的,则表示该数据没有被篡改过
性能问题:非对称加密效率较差,证书信息一般较长,比较耗时。而hash后得到的是固定长度的信息(比如用md5算法hash后可以得到固定的128位的值),这样加解密就快很多。
假设中间人篡改了证书的原文,由于他没有CA机构的私钥,所以无法得到此时加密后签名,无法相应地篡改签名。浏览器收到该证书后会发现原文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人。
假设有另一个网站B也拿到了CA机构认证的证书,它想劫持网站A的信息。于是它成为中间人拦截到了A传给浏览器的证书,然后替换成自己的证书,传给浏览器,之后浏览器就会错误地拿到B的证书里的公钥了,这确实会导致上文“中间人攻击”那里提到的漏洞?
其实这并不会发生,因为证书里包含了网站A的信息,包括域名,浏览器把证书里的域名与自己请求的域名比对一下就知道有没有被掉包了。
数字证书是为了证明某公钥是可信的,即“该公钥是否对应该网站”,那CA机构的公钥是否也可以用数字证书来证明?没错,操作系统、浏览器本身会预装一些它们信任的根证书,如果其中会有CA机构的根证书,这样就可以拿到它对应的可信公钥了。
实际上证书之间的认证也可以不止一层,可以A信任B,B信任C,以此类推,我们把它叫做信任链或数字证书链。也就是一连串的数字证书,由根证书为起点,透过层层信任,使终端实体证书的持有者可以获得转授的信任,以证明身份。
另外,不知你们是否遇到过网站访问不了、提示需安装证书的情况?这里安装的就是根证书。说明浏览器不认给这个网站颁发证书的机构,那么你就得手动下载安装该机构的根证书(风险自己承担XD)。安装后,你就有了它的公钥,就可以用它验证服务器发来的证书是否可信了。
服务器会为每个浏览器(或客户端软件)维护一个session ID,在TLS握手阶段传给浏览器,浏览器生成好密钥传给服务器后,服务器会把该密钥存到相应的session ID下,之后浏览器每次请求都会携带session ID,服务器会根据session ID找到相应的密钥并进行解密加密操作,这样就不必要每次重新制作、传输密钥了
保证消息不被篡改
为了保证消息的内容不被篡改, HTTPS采用哈希算法将消息计算出一个指纹, 并与内容一同传输, 接收端接受到信息采用相同的哈希算法计算指纹, 对比成功即可保证消息内容没有被篡改.
保证消息来源可靠
为保证消息没有被中间人替换, 采用非对称加密算法,也就是数字签名算法, 发送端使用私钥加密指纹信息, 若接收端可以通过公钥正常的解析出内容, 则证明消息来自拥有私钥的一端, 也就保证了来源可靠.
保证对方身份, 也就是保证公私钥没有被伪造.
采用CA证书确认, CA将 [发送端信息+非对称加密的公钥+数字签名]使用自己的私钥加密, 打包成一个数字证书发送到接收端, 若证书可信, 则说明公钥可信, 于是可以使用公钥来解密消息.
对称加密:加密和解密使用相同的密钥,如 DES,AES,3DES
非对称加密:使用两个密钥:公钥和私钥,用公钥加密,只有对应的私钥才能解密;而用私钥加密,只有用对应的公钥才能解密。如 RSA 算法等。
混合加密
HTTPS 采用的是对称加密和非对称加密结合的 「混合加密」 方式:
在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。
采用「混合加密」的方式的原因: 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但 速度慢。
摘要算法
摘要算法用来实现完整性,能够为数据生成独一无二的「指纹」,用于校验数据的完整性,解决了篡改 的风险。
服务端通过摘要算法将数据重新生成指纹,两指纹匹配则说明数据没有被篡改
数字证书
客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
这就存在些问题,如何保证公钥不被篡改和信任度?
所以这里就需要借助第三方权威机构 CA (数字证书认证机构),将服务器公钥放在数字证书(由数 字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。
首先取两个不相等的质数p与q,并计算pq乘积n,n的二进制长度就是密钥的长度,计算n的欧拉函数值f,然后选出一个与f互质,且大小在1到f之间的数e,计算e模为f的逆元d,此时ed = 1 (mod f)
将n与e封装成公钥,n与d封装为私钥即可。
cookie和session都是用来跟踪浏览器用户身份的会话方式。
cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上 , 它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。 cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力
Session 代表着服务器和客户端一次会话的过程。Session 对象存储特定用户会话所需的属性及配置信息。
Session 代表着服务器和客户端一次会话的过程。Session 对象存储特定用户会话所需的属性及配置信息。
ping得通,说明IP层没问题,服务器ip正常,问题可能在应用层或者传输层。
请求报文主要由 4 部分组成:
响应报文主要由 4 部分组成:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。