https原理

TCP/IP协议簇

TCP/IP协议簇是协议的集合,包含上图等协议,http协议就是它的一个子集;TCP/IP协议并不完全符合OSI的七层参考模型,它采用了4层的层级结构,如下图。

  • http协议处于应用层,当客户端发送http请求,为了便于传输,传输层(TCP协议)将应用层的http报文进行切割,并在各个报文上打上标记序号及端口号,转发给网络层(IP协议),网络层增加目的地——MAC地址后转发给链路层,这样发送网络的请求准备就齐全了;服务器端在链路层接收到数据,按顺序往上发送,一直到应用层,这样才算真正接收到http请求。

  • 发送端在曾与层之间传输数据时,每经过一层必定会被打上一个该层所属的首部信息,反之,服务器端在接收时会一层一层的去掉首部信息,这种把数据信息包装起来的方法叫做封装

  • 为了确认数据送到目标处,TCP协议采用了三次握手的策略,握手的过程中使用了TCP标志(flag)——SYNACK:发送端首先发送一个带有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请求过程中,客户端与服务器之间没有任何身份确认的过程,数据全部明文传输,“裸奔”在互联网上,所以很容易遭到黑客的攻击,如下:


加密算法

  1. 对称加密:加密和解密都是使用的同一个密钥——对称密钥
  2. 非对称加密: 加密和解密使用不同的密钥——公钥私钥公钥算法都是公开的,私钥是保密的,用公钥加密,就可以用私钥解密,反之亦然;但公钥是公开的(黑客也有公钥),如果私钥加密的信息被黑客截获,黑客同样可以使用公钥进行解密,获取其中的内容,所以使用非对称加密,通信双方通常有两套私钥公钥,发消息的一方使用对方的公钥进行加密,接收消息的一方使用自己的私钥解密(所以私钥可以认为是个人身份的证明);非对称加密算法性能较低,但是安全性超强,由于其加密特性,非对称加密算法能加密的数据长度也是有限的。
  3. 消息摘要消息摘要哈希算法的一种,可以将消息哈希转换成一个固定长度的值唯一的字符串。值唯一的意思是不同的消息转换的摘要是不同的,并且能够确保唯一。该过程不可逆,即不能通过摘要反推明文(似乎SHA1已经可以被破解了,SHA2还没有。一般认为不可破解,或者破解需要耗费太多时间,性价比低)。
  4. 数字签名: 签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过;hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改,举例如下:
    假设现在有通信双方A和B,两者之间使用两套非对称加密机制,现在A向B发消息:

    那么,如果在发送过程中,有人修改了里面密文消息,B拿到的密文,解密之后得到明文,并非A所发送的,信息不正确。
    要解决两个问题:1. A的身份认证 2. A发送的消息完整性 那么就要用到上面所讲的基础知识。
    数字签名的过程如下图:

    简单解释:
    A:将明文进行摘要运算后得到摘要(消息完整性),再将摘要用A的私钥加密(身份认证),得到数字签名,将密文和数字签名一块发给B。
    B:收到A的消息后,先将密文用自己的私钥解密,得到明文。将数字签名用A的公钥进行解密后,得到正确的摘要(解密成功说明A的身份被认证了)。
    对明文进行摘要运算,得到实际收到的摘要,将两份摘要进行对比,如果一致,说明消息没有被篡改(消息完整性)。
    疑问:
    摘要使用A的私钥加密,如果被拥有A的公钥的第三者截获,不就可以获取到摘要了么,会不会对安全造成威胁?
    答:不会,因为摘要是不可逆推出原文的。

HTTP 向 HTTPS 演化

使用对称加密

若对传输的信息加密,这样即使黑客截获,也无法破解

此种方式属于对称加密,双方拥有相同的密钥,信息得到安全传输,但此种方式的缺点是:

  1. 因为双方都要有密钥,所以若是客户端有了一个密钥,如何安全地给服务器也传送一把
  2. 客户端、服务器数量多,安全级别也不同,密钥极易泄露

所以试一试非对称加密


使用非对称加密


如上图所示,它只使用了一套公钥私钥,客户端用公钥对请求内容加密,服务器使用私钥对内容解密,同理,服务器使用私钥加密,客户端可以使用公钥解密,所以缺点就出来了:公钥是公开的(也就是黑客也会有公钥),所以第4步是不安全的,如果私钥加密的信息被黑客截获,黑客同样可以使用公钥进行解密,获取其中的内容。

但第3步是安全的,所以可以利用非对称加密的第3步,再结合对称加密的方式,一起实现加密。


对称与非对称加密的结合

  1. 第3步使用的是非对称加密,客户端用公钥加密,将对称加密算法对称密钥传输给了服务器
  2. 服务器收到信息后,用私钥解密,提取出对称加密算法对称密钥,这时客户端和服务器端都有了对称密钥
  3. 从第4步开始,双方都使用对称加密进行通信

这种方式的问题:

  1. 客户端如何获得公钥
  2. 如何确认服务器是真实的而不是黑客

所以有了数字证书,服务器需要申购SSL证书


SSL证书校验


如上图所示,在第2步时服务器发送了一个SSL证书给客户端,SSL 证书中包含的具体内容有:

  1. 证书的发布机构CA
  2. 证书的有效期
  3. 公钥
  4. 证书所有者
  5. 签名

客户端在接受到服务端发来的SSL证书时,会对证书的真伪进行校验,以浏览器为例说明如下:

  1. 首先浏览器读取证书中的证书所有者有效期等信息进行一一校验
  2. 浏览器的”证书管理器”,有”受信任的根证书颁发机构”列表,客户端会根据这张列表,比对服务器发来的证书中的颁发者CA,校验证书是否为合法机构颁发
  3. 如果找不到,浏览器就会报错,说明服务器发来的证书不可信任的。
  4. 如果找到,那么浏览器就会从操作系统中取出颁发者CA公钥,然后对服务器发来的证书里面的签名进行解密
  5. 浏览器使用相同的摘要算法计算出服务器发来的证书摘要,将这个计算的摘要与证书签名解密出的摘要做对比
  6. 对比结果一致,则证明服务器发来的证书合法,没有被冒充
  7. 此时浏览器就可以读取证书中的公钥,用于后续加密了

所以通过发送SSL证书的形式,既解决了公钥获取问题,又解决了黑客冒充问题,一箭双雕,HTTPS加密过程也就此形成
所以相比HTTP,HTTPS 传输更加安全

  1. 所有信息都是加密传播,黑客无法窃听。
  2. 具有校验机制,一旦被篡改,通信双方会立刻发现。
  3. 配备身份证书,防止身份被冒充。

总结

综上所述,相比 HTTP 协议,HTTPS 协议增加了很多握手、加密解密等流程,虽然过程很复杂,但其可以保证数据传输的安全。所以在这个互联网膨胀的时代,其中隐藏着各种看不见的危机,为了保证数据的安全,维护网络稳定,建议大家多多推广HTTPS。
HTTPS 缺点:

  1. SSL 证书费用很高,以及其在服务器上的部署、更新维护非常繁琐
  2. HTTPS 降低用户访问速度(多次握手)
  3. 网站改用HTTPS 以后,由HTTP 跳转到 HTTPS 的方式增加了用户访问耗时(多数网站采用302跳转)
  4. HTTPS 涉及到的安全算法会消耗 CPU

本文转载自 HTTPS 加密算法原理详解,增加了少量自己的归纳、理解
参考:

  1. 《图解HTTP协议》
  2. 数字签名原理简介