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