计算机网络——HTTPS相关知识小结
HTTPS相关知识小结
HTTP的缺点
主要有下面几点:
- 通信使用不加密的明文报文,内容可能会被窃听
- 不验证通信方身份,有可能遭遇伪装
- 无法证明报文的完整性,所以报文有可能会被篡改
为了解决以上一系列问题,需要在HTTP的基础上加入加密处理和认证等机制,这就出现了HTTPS。
HTTP协议可以和SSL(Secure Socket Layer,安全套结层)或TLS(Transport Layer Security,安全层传输协议)组合使用,来加密HTTP的通信内容。其中与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)。
HTTPS的本质
正如上面所说,HTTPS并不是应用层的一种新协议,而是身披SSL外壳的HTTP。为什么这样说呢?因为两者的区别就在于:HTTPS协议中,SSL或TLS作为HTTPS和TCP的中间层,如下图所示:
SSL
SSL是独立于HTTP的协议,是当今世界上应用最广泛的网络安全技术。
它采用**公开密钥加密(非对称密钥加密)**的方式进行加密。
对称加密和非对称加密
对称密钥加密
也称为共享密钥加密。即加密和解密同用同一个密钥的方式进行加密。
缺点:无法将密钥安全地发送给对方,因为在发送过程中信息可能被第三方劫持而导致密钥泄露,因此有了下面的非对称加密技术。
非对称密钥加密
也称为公开密钥加密。这种方式使用两把密钥,一把叫私有密钥,另一把叫公开密钥。这种方式很好地解决了对称加密的问题。
在通信时,发送密文的一方使用对方的公开密钥进行加密,接收方使用自己的私有密钥对收到的信息进行解密。这样就不需要发送用来解密的私有密钥,就不存在对称密钥加密的问题了。
这种方式进行加密解密的算法叫做RSA
缺点:
- 算法复杂,加密解密效率较低
- 无法证明公开密钥本身就是真正的公开密钥。真正的公开密钥有可能被第三方替换。
HTTPS的加密方式
HTTPS采用对称加密和非对称加密混合的加密方式。
两种方式取长补短,结合食用效果更佳。在交换密钥时(也就是在建立SSL连接时)使用非对称加密,在两端建立连接后(也就是在传输HTTP报文时)采用对称加密提高数据交换效率。
数字签名和数字证书
数字签名
数字签名是附加在消息后的一段特殊的加密过的校验码。
作用:
- 报文鉴别:接受者能够核实收到的报文是发送者发送的
- 确保报文完整性:接受者收到的数据和发送者发送的内容完全一样,没被修改过
- 不可否认:发送者事后不能抵赖对报文的签名
生成签名:A方用自己的私钥对消息“加密”
具体步骤:
- 对消息进行哈希计算,得到哈希值
- 利用私钥对哈希值进行加密,生成签名
- 将签名附加在消息后面,一起发送过去
验证签名:B方或其他任何一方使用A方的公钥进行“解密”
具体步骤:
- 收到消息后,提取消息中的签名
- 用公钥对签名进行解密,得到哈希值1。
- 对消息中的正文进行哈希计算,得到哈希值2。
- 比较哈希值1和哈希值2,如果相同,则验证成功。
由于A的私钥是唯一的,而且没有其他人知道A的私钥,所以除了A没有别人可以生成和他相同的密文,因此可以确认是A方发送的。
数字证书
数字证书就是由可信赖的证书认证机构(Certification Authority, CA)颁发的公开密钥证书。
申请人申请后CA会对申请人的公钥进行数字签名,然后CA会将公钥证书(也叫数字证书、证书)颁发给申请人。
作用:就是为了解决非对称加密中 “接收方无法验证收到的公开密钥就是发送方发送的公开密钥” 这一问题。
有了数字证书后,客户端和服务端通信流程:
- 客户端向服务器建立通信之前首先向服务器请求获得服务器的证书。
- 服务器收到请求后把数字证书发送给客户端。
- 客户端获得服务器的证书之后,然后与可信任的第三方机构证书进行验证,验证通过后则进行正常的内容通信。
HTTPS通信流程
先通过SSL两次握手建立SSL安全连接后,就可以进行应用层的HTTP通信,通信完成后会关闭TCP连接。
第一次SSL握手
-
客户端发送Client Hello报文开始进行SSL通信
-
服务端可以进行SSL通信时,会回应Server Hello报文。
-
服务器发送包含公钥证书的报文
-
服务器发送Server Hello Done报文给客户端,SSL第一次握手结束。
第二次SSL握手
此次握手成功与否取决于服务器能否正确解密第7步客户端发送的Finished报文
-
客户发送Client Key Exchange报文,报文中包含一个随机密码串(叫做Pre-master secret),此报文已被步骤3中的公钥加密
-
客户端继续发送Change Cipher Spec报文,它会提示服务器采用第5步中的随机密码串进行加密
-
客户端发送Finished报文,它包含以上步骤的整体校验值。
-
服务器回应Change Cipher Spec报文
-
服务器回应Finished报文,自此SSL连接建立完成,后面即可开始通过HTTP请求交换数据
开始进行HTTP请求和响应
-
客户端发送HTTP请求报文
-
服务端发送响应报文
-
经过许多次HTTP数据交换(即10、11两步)后,由客户端断开连接,发送close_notify报文。后面客户数会再发生TCP FIN报文关闭TCP连接。
参考资料
《图解HTTP》
本文地址:https://blog.csdn.net/qq_43935080/article/details/107619113