https原理
TCP/IP协议簇
TCP/IP协议簇
是协议的集合,包含上图等协议,http协议就是它的一个子集;TCP/IP协议并不完全符合OSI的七层参考模型,它采用了4层的层级结构,如下图。
http协议
处于应用层
,当客户端发送http请求,为了便于传输,传输层
(TCP协议)将应用层的http报文进行切割,并在各个报文上打上标记序号及端口号,转发给网络层
(IP协议),网络层
增加目的地——MAC地址
后转发给链路层
,这样发送网络的请求准备就齐全了;服务器端在链路层
接收到数据,按顺序往上发送,一直到应用层
,这样才算真正接收到http请求。发送端在曾与层之间传输数据时,每经过一层必定会被打上一个该层所属的
首部信息
,反之,服务器端在接收时会一层一层的去掉首部信息
,这种把数据信息包装起来的方法叫做封装
。为了确认数据送到目标处,TCP协议采用了三次握手的策略,握手的过程中使用了TCP标志(flag)——
SYN
和ACK
:发送端首先发送一个带有SYN
的标志给对方,接收端收到后,发送一个SYN/ACK
标志的数据包,表示确认收到,最后,发送端再发送一个ACK
标志的数据包,代表“握手”结束。
http协议
HTTP协议
(HyperText Transfer Protocol,超文本传输协议):是客户端与Web服务器之间的应用层通信协议。
http协议的不足
- 通信使用明文(不加密),内容有可能被窃听
- 不验证通信双方的身份,有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
https协议
HTTPS 协议
(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。
如上图,HTTPS 相比 HTTP 多了一层 SSL/TLS,位于应用层与TCP协议之间。
http请求劫持
HTTP请求过程中,客户端与服务器之间没有任何身份确认的过程,数据全部明文传输,“裸奔”在互联网上,所以很容易遭到黑客的攻击,如下:
加密算法
对称加密
:加密和解密都是使用的同一个密钥——对称密钥
。非对称加密
: 加密和解密使用不同的密钥——公钥
、私钥
,公钥
和算法
都是公开的,私钥
是保密的,用公钥
加密,就可以用私钥
解密,反之亦然;但公钥
是公开的(黑客也有公钥
),如果私钥
加密的信息被黑客截获,黑客同样可以使用公钥
进行解密,获取其中的内容,所以使用非对称加密,通信双方通常有两套私钥
和公钥
,发消息的一方使用对方的公钥
进行加密,接收消息的一方使用自己的私钥
解密(所以私钥
可以认为是个人身份的证明);非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。消息摘要
:消息摘要
是哈希
算法的一种,可以将消息哈希
转换成一个固定长度的值唯一的字符串。值唯一的意思是不同的消息转换的摘要
是不同的,并且能够确保唯一。该过程不可逆,即不能通过摘要
反推明文
(似乎SHA1已经可以被破解了,SHA2还没有。一般认为不可破解,或者破解需要耗费太多时间,性价比低)。数字签名
: 签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过;hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改,举例如下:
假设现在有通信双方A和B,两者之间使用两套非对称加密机制,现在A向B发消息:
那么,如果在发送过程中,有人修改了里面密文消息,B拿到的密文,解密之后得到明文,并非A所发送的,信息不正确。
要解决两个问题:1. A的身份认证 2. A发送的消息完整性 那么就要用到上面所讲的基础知识。
数字签名的过程如下图:
简单解释:
A:将明文进行摘要运算后得到摘要(消息完整性),再将摘要用A的私钥加密(身份认证),得到数字签名,将密文和数字签名一块发给B。
B:收到A的消息后,先将密文用自己的私钥解密,得到明文。将数字签名用A的公钥进行解密后,得到正确的摘要(解密成功说明A的身份被认证了)。
对明文进行摘要运算,得到实际收到的摘要,将两份摘要进行对比,如果一致,说明消息没有被篡改(消息完整性)。
疑问:
摘要使用A的私钥加密,如果被拥有A的公钥的第三者截获,不就可以获取到摘要了么,会不会对安全造成威胁?
答:不会,因为摘要是不可逆推出原文的。
HTTP 向 HTTPS 演化
使用对称加密
若对传输的信息加密,这样即使黑客截获,也无法破解
此种方式属于对称加密
,双方拥有相同的密钥,信息得到安全传输,但此种方式的缺点是:
- 因为双方都要有
密钥
,所以若是客户端有了一个密钥
,如何安全地给服务器也传送一把 - 客户端、服务器数量多,安全级别也不同,
密钥
极易泄露
所以试一试非对称加密
使用非对称加密
如上图所示,它只使用了一套公钥
和私钥
,客户端用公钥对请求内容加密,服务器使用私钥
对内容解密,同理,服务器使用私钥
加密,客户端可以使用公钥
解密,所以缺点就出来了:公钥
是公开的(也就是黑客也会有公钥
),所以第4步是不安全的,如果私钥
加密的信息被黑客截获,黑客同样可以使用公钥
进行解密,获取其中的内容。
但第3步是安全的,所以可以利用非对称加密
的第3步,再结合对称加密
的方式,一起实现加密。
对称与非对称加密的结合
- 第3步使用的是
非对称加密
,客户端用公钥
加密,将对称加密算法
和对称密钥
传输给了服务器 - 服务器收到信息后,用
私钥
解密,提取出对称加密算法
和对称密钥
,这时客户端和服务器端都有了对称密钥
- 从第4步开始,双方都使用
对称加密
进行通信
这种方式的问题:
- 客户端如何获得公钥
- 如何确认服务器是真实的而不是黑客
所以有了数字证书,服务器需要申购SSL证书
SSL证书校验
如上图所示,在第2步时服务器发送了一个SSL证书给客户端,SSL 证书中包含的具体内容有:
- 证书的发布机构CA
- 证书的有效期
- 公钥
- 证书所有者
- 签名
…
客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验,以浏览器为例说明如下:
- 首先浏览器读取证书中的
证书所有者
、有效期
等信息进行一一校验 - 浏览器的”证书管理器”,有”受信任的根证书颁发机构”列表,客户端会根据这张列表,比对服务器发来的证书中的
颁发者CA
,校验证书是否为合法机构
颁发 - 如果找不到,浏览器就会报错,说明服务器发来的
证书
是不可信任
的。 - 如果找到,那么浏览器就会从操作系统中取出
颁发者CA
的公钥
,然后对服务器发来的证书
里面的签名
进行解密
- 浏览器使用相同的
摘要
算法计算出服务器发来的证书
的摘要
,将这个计算的摘要
与证书签名
解密出的摘要
做对比 - 对比结果一致,则证明服务器发来的
证书
合法,没有被冒充 - 此时浏览器就可以读取证书中的
公钥
,用于后续加密了
所以通过发送SSL证书的形式,既解决了公钥获取问题,又解决了黑客冒充问题,一箭双雕,HTTPS加密过程也就此形成
所以相比HTTP,HTTPS 传输更加安全
- 所有信息都是加密传播,黑客无法窃听。
- 具有校验机制,一旦被篡改,通信双方会立刻发现。
- 配备身份证书,防止身份被冒充。
总结
综上所述,相比 HTTP 协议,HTTPS 协议增加了很多握手、加密解密等流程,虽然过程很复杂,但其可以保证数据传输的安全。所以在这个互联网膨胀的时代,其中隐藏着各种看不见的危机,为了保证数据的安全,维护网络稳定,建议大家多多推广HTTPS。
HTTPS 缺点:
- SSL 证书费用很高,以及其在服务器上的部署、更新维护非常繁琐
- HTTPS 降低用户访问速度(多次握手)
- 网站改用HTTPS 以后,由HTTP 跳转到 HTTPS 的方式增加了用户访问耗时(多数网站采用302跳转)
- HTTPS 涉及到的安全算法会消耗 CPU
本文转载自 HTTPS 加密算法原理详解,增加了少量自己的归纳、理解
参考:
- 《图解HTTP协议》
- 数字签名原理简介