1. http的缺点
通讯使用明文(不加密), 内容可能被窃听。 可以通过加密来防止窃听。
不验证通讯方的身份,可能遭遇伪装。 通过证书来确认通讯方的身份。
无法证明报文的完整性,有可能遭到篡改。 使用摘要算法保证完整性。
2.http + 加密 + 认证 + 完整性保护 = HTTPS
我们把添加了加密及认证等机制的 HTTP 称为 HTTPS(HTTP Secure)
HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。
3.https的加密原理(不被窃听)
-
共享密钥加密
加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system),也被叫做对称密钥 加密。
以共享密钥方式加密时必须将密钥也发给对方,发送时可能被监听,失去加密的意义。
2.公开密钥加密
公开密钥加密使用一对非对称的密钥。一把叫做私有密钥(private key),另一把叫做公开密钥(public key)。发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息 后,再使用自己的私有密钥进行解密。
利用这种方式,不需要发送用来解密的私有密钥,也不必担心密 钥被攻击者窃听而盗走。
3.HTTPS 采用混合加密机制
在交换密钥环节使用公开密钥(非对称)加密方式,之后的建立通信交换报文阶段则使用共享密钥(对称)加密方式。
4.证明公钥正确性的证书(证明身份)
公开密钥加密方式还是存在一些问题的。那就是无法证明公开密钥本身就是货真价实的公开密钥。
为了解决上述问题,可以使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。
数字证书很难伪造。证书中包含公钥,如果证明了证书是真实的,那么公钥就是真实可信的。
如何证明证书是真实的: 使用数字签名技术。 证书不仅包含公钥, 还包含各种信息做的数字签名。 证书发送到客户端后,客户端比对数字签名的过程叫验签。 验签通过,则证明证书正确,则证明公钥正确。
5.保证完整性
应用层发送数据时会附加一种叫做 MAC(Message Authentication Code)的报文摘要。MAC 能够查知报文是否遭到篡改,从而保护报文的完整性。(保证完整性)
6. 完整的https通讯过程:
- 客户端发送Client hello, 包括: 支持的ssl版本, 支持的对称加密列表。
2.服务器发Server hello, 选择好的某个对称加密方式。
服务器发Certificate报文,公钥证书。
服务器发Server Hello Done。 初阶段的ssl协商结束。------------------------
5.客户端发Client key Exchange 。发送一个使用 公钥加密的 随机密码串(Pre-master secret)。
6.客户端发送 Change Cipher Spec 。提示服务器之后的通讯使用 随机密码串Pre-master secret 加密。
7.客户端发送Finish报文,该报文包含连接至今全部报文的整体校验值。
8.服务器同样发送 Change Cipher Spec。
9.服务器同样发送 Finished。-----------------------
10.从此处开始进行应用层协议的通信,即发送 HTTP 请求。
11.应用层协议通信,即发送 HTTP 响应。
12.最后由客户端断开连接。断开连接时,发送 close_notify 报文。上图做了一些省略,这步之后再发送 TCP FIN 报文来关闭与 TCP 的通信
7. https的速度慢
HTTPS 也存在一些问题,那就是当使用 SSL 时,它的处理速度会变慢。
- 因为要进行加密处理,所以慢。
2.要进行ssl通信,所以速度慢。
8.客户端证书。
通过https的流程,我们了解到,证书是从服务器 发送到客户端的,以验证的是服务器是正确性。
同样,客户端也可以有证书,来验证客户端的正确性。
9.认证:
某些 Web 页面只想让特定的人浏览,或者干脆仅本人可见。为达到这个目标,必不可少的就是认证功能。
1.basic认证:
将用户名和密码使用base64编码后 写入首部authorization字段。
2.digest认证
服务器发送一个临时质询码。 客户端将用户密码 经过md5运算后,和质询码,用户名等,写入首部Authorization字段。
3.SSL客户端认证
SSL 客户端认证是借由 HTTPS 的客户端证书完成认证的方式。凭借客户端证书(在 HTTPS 一章已讲解)认证,服务器可确认访问是否来自已登录的客户端。
4.表单认证
基于表单的认证方法并不是在 HTTP 协议中定义的。客户端会向服务器上的 Web 应用程序发送登录信息(Credential),按登录信息的验证结果认证。