https
前言
- 在写
https之前,先简单梳理一下http的一些问题- 通信使用明文(不加密) , 内容可能会被窃听
- 由于
HTTP本身不具备加密的功能, 所以也无法做到对通信整体(使用HTTP协议通信的请求和响应的内容) 进行加密-
TCP/IP是可能被窃听的网络:
- 互联网窃听图
image
+ 加密处理防止被窃听手段
+ 通信的加密:通过和SSL(Secure Socket Layer, 安全套接层)或TLS(Transport Layer Security, 安全层传输协议) 的组合使用,加密HTTP的通信内容
> + 加密后通信图
>image
+ 内容的加密:将参与通信的内容本身加密的方式。 由于HTTP协议中没有加密机制, 那么就对HTTP协议传输的内容本身加密。 即把HTTP报文里所含的内容进行加密处理
+ 该方式不同于SSL或TLS将整个通信线路加密处理, 所以内容仍有被篡改的风险
> + 加密后的内容图
> +image
-
- 由于
- 不验证通信方的身份, 因此有可能遭遇伪装
- 任何人都可发起请求
- 如图
image
+ 隐患:
+ 无法确定请求发送至目标的 Web 服务器是否是按真实意图返回响应的那台服务器
+ 无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端
+ 无法确定正在通信的对方是否具备访问权限。 因为某些Web服务器上保存着重要的信息, 只想发给特定用户通信的权限
+ 无法判定请求是来自何方、 出自谁手
+ 即使是无意义的请求也会照单全收。 无法阻止海量请求下的DoS攻击(Denial of Service, 拒绝服务攻击)
+ 查明对手的证书
+ 可以使用SSL确认通信方,SSL不仅提供加密处理, 而且还使用了一种被称为证书的手段,可用于确定方
> + 确认通信方
>image
> + 通过使用证书, 以证明通信方就是意料中的服务器。 这对使用者个人来讲, 也减少了个人信息泄露的危险性
- 如图
- 任何人都可发起请求
- 无法证明报文的完整性, 所以有可能已遭篡改
- 所谓完整性是指信息的准确度.若无法证明其完整性, 通常也就意味着无法判断信息是否准确
-
接收到的内容可能有误
- 原因:由于
HTTP协议无法证明通信的报文完整性, 因此, 在请求或响应送出之后直到对方接收之前的这段时间内, 即使请求或响应的内容遭到篡改, 也没有办法获悉,换句话说, 没有任何办法确认, 发出的请求 / 响应和接收到的请求 / 响应是前后相同的
-
如图
image - 像这样, 请求或响应在传输途中, 遭攻击者拦截并篡改内容的攻击称为中间人攻击(
Man-in-the-Middle attack, MITM) -
中间人攻击
image
- 原因:由于
-
如何防止篡改
- 常用的是
MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法
- 常用的是
-
- 所谓完整性是指信息的准确度.若无法证明其完整性, 通常也就意味着无法判断信息是否准确
- 通信使用明文(不加密) , 内容可能会被窃听
HTTPS
-
HTTPS=HTTP+ 加密 + 认证 + 完整性保护
概念
-
HTTP加上加密处理和认证以及完整性保护后即是HTTPS,我们把添加了加密及认证机制的HTTP称为HTTPS(HTTP Secure)-
使用 HTTPS 通信
image
-
本质
-
HTTPS是身披SSL外壳的HTTP- HTTPS 并非是应用层的一种新协议。 只是 HTTP 通信接口部分用
SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已-
HTTP与HTTPS通信方式区别图
image - 在采用
SSL后,HTTP就拥有了HTTPS的加密、 证书和完整性保护这些功能,SSL是独立于HTTP的协议, 所以不光是HTTP协议, 其他运行在应用层的SMTP和Telnet等协议均可配合SSL协议使用。 可以说SSL是当今世界上应用最为广泛的网络安全技术
-
- HTTPS 并非是应用层的一种新协议。 只是 HTTP 通信接口部分用
-
相互交换密钥的公开密钥加密技术
- 加密方法:
SSL采用一种叫做公开密钥加密(Public-key cryptography) 的加密处理方式,近代的加密方法中加密算法是公开的, 而密钥却是保密的。 通过这种方式得以保持加密方法的安全性 - 共享密钥加密的困境
- 加密和解密同用一个密钥的方式称为共享密钥加密(
Common key crypto system) , 也被叫做对称密钥加密-
加密和解密同用一个密钥的方式图
image - 密钥发送问题图
image
+ 使用两把密钥的公开密钥加密
+ 公开密钥加密方式很好地解决了共享密钥加密的困难
+ 公开密钥加密使用一对非对称的密钥。一把叫做私有密钥 (private key),另一把叫做公开密钥(public key)。顾名思 义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发 布,任何人都可以获得
> + 使用公开密钥加密方式
>image
-
- 加密和解密同用一个密钥的方式称为共享密钥加密(
-
HTTPS采用混合加密机制-
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。所以应充分利用两者各自的优势,将多种方法组合起来用于通 信。在交换密钥环节使用公开密钥加密方式,之后的建立通信交 换报文阶段则使用共享密钥加密方式-
混合加密机制图
image
-
-
- 加密方法:
-
HTTPS的安全通信机制-
HTTPS通信图
image
- 步骤:
- 客户端通过发送
Client Hello报文开始SSL通信。 报文中包含客户端支持的SSL的指定版本、 加密组件(Cipher Suite) 列表(所使用的加密算法及密钥长度等)
- 客户端通过发送
- 服务器可进行 SSL通信时, 会以
Server Hello报文作为应答。 和客户端一样, 在报文中包含SSL版本以及加密组件。 服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的
- 服务器可进行 SSL通信时, 会以
- 之后服务器发送
Certificate报文。 报文中包含公开密钥证书
- 之后服务器发送
- 最后服务器发送
Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束
- 最后服务器发送
- 最后服务器发送
Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束
- 最后服务器发送
- 接着客户端继续发送
Change Cipher Spec报文。 该报文会提示服务器, 在此报文之后的通信会采用Pre-master secret密钥加密
- 接着客户端继续发送
- 客户端发送
Finished报文。 该报文包含连接至今全部报文的整体校验值。 这次握手协商是否能够成功, 要以服务器是否能够正确解密该报文作为判定标准
- 客户端发送
- 服务器同样发送
Change Cipher Spec报文
- 服务器同样发送
- 服务器同样发送
Finished报文
- 服务器同样发送
- 服务器和客户端的
Finished报文交换完毕之后, SSL连接就算建立完成。 当然, 通信会受到SSL的保护。 从此处开始进行应用层协议的通信, 即发送HTTP请求
- 服务器和客户端的
- 应用层协议通信, 即发送
HTTP响应
- 应用层协议通信, 即发送
- 最后由客户端断开连接。 断开连接时, 发送
close_notify报文。 上图做了一些省略, 这步之后再发送TCP FIN报文来关闭与TCP的通信
- 最后由客户端断开连接。 断开连接时, 发送
-
完整流程图解
image -
CBC模式(Cipher Block Chaining): 又名密码分组链接模式。 在此模式下, 将前一个明文块加密处理后和下一个明文块做XOR运算, 使之重叠, 然后再对运算结果做加密处理。 对第一个明文块做加密时, 要么使用前一段密文的最后一块,要么利用外部生成的初始向量(initial vector, IV) -
HTTPS使用SSL(Secure Socket Layer) 和TLS(Transport Layer Security)这两个协议
- 缺点:
- 1)
HTTPS也存在一些问题, 那就是当使用SSL时, 它的处理速度会变慢 - 2) 与纯文本通信相比, 加密通信会消耗更多的
CPU及内存资源。 如果每次通信都加密, 会消耗相当多的资源, 平摊到一台计算机上时, 能够处理的请求数量必定也会随之减少
-
HTTPS使用SSL图
image
- 1)
- 综合以上缺点
- 如果是非敏感信息则使用
HTTP通信, 只有在包含个人信息等敏感数据时, 才利用HTTPS加密通信
- 如果是非敏感信息则使用
-















