HTTPS简介
由于http协议通信的时候,是用明文传输造成通信的不安全性。所以为了防止信息的传输的过程中被篡改或者窃取,就出现了对传输信息进行加密的协议https。
https是一种机密的超文本传输协议,与http协议的区别就在于对数据的传输中,https对数据做了加密。
OSI七层网络模型与TPC/IP四层应用模型
OSI是有七层结构的一个模型,其中包括:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP是一个协议簇,其中包括:物理层、网络层、传输层、应用层;由七层模型简化合并而来,是一个实现的应用模型
HTTPS实现原理
1、客户端发起一个https的请求,把自身支持的一系列Cipher Suite(密钥算法套件,简称Cipher)发送给服务端。
(1) 三次握手,建立TCP连接
(2) 支持的协议版本(TLS/SSL)。
(3) 一个客户端生成的随机数 c.random,稍后用于生成"对称密钥"。
(4) 支持的加密方法,比如RSA公钥加密。
(5) sessionid(保持会话)
2、服务器收到请求,然后响应
(1)确认使用的加密通信协议版本。
(2)一个服务器生成的随机数s.random,稍后用于生成"对称密钥"。
(3)确认使用的加密方法,用于后续的握手消息进行签名防止篡改。
(4)服务器证书(CA机构颁发给服务器的证书)
3、客户端收到证书之后会首先会进行验证
- 验证证书的合法性
(1)验证证书是否是上级CA签发;浏览器会调用系统的证书管理器接口对证书路径中的所有证书一级一级的验证。保证路径中的所有证书是可受信的。
(2)证书有效期
(3)是否被吊销
(4)验证证书是否被篡改过,使用浏览器内置的CA公钥信息来验签,判断服务器返回的证书信息是否相同
- 生成随机密码pre-master secret
验证通过之后,客户端会生成一个随机数pre-master secret,然后使用证书中的公钥进行签名,然后传递给服务器端。
4、服务器收到使用公钥加密的内容,在服务器端使用私钥解密之后获得随机数pre-master secret,然后根据c.random、s.random、pre-master secret通过一定的算法得出session key作为后面交互过程中使用的对称秘钥。
5、客户端收到消息后,验证session key合法性;然后在后续的交互中就使用session key对传输的内容进行加密和解密。
浏览器使用c.random、s.random、pre-master secret通过一定的算法得出session key;与服务器返回的session key进行匹配