1.http
tcp三次握手,明文传输。
(1)为什么http协议是无状态的? http无状态特性简化了http服务器的设计,是服务器更容易支持大量并发的http请求。 (2)http/1.1使用持续连接? 非持续连接每次请求都要进行tcp重连,每一次建立新的tcp连接都要分配缓存和量,开销很大不利于并发。持续连接是服务器发生响应后仍在一段时间内保持这条连接,使同一个客户和该服务器可以继续在这条连接上传送后续的http请求和响应报文。
2.https
tcp三次握手,ssl加密,加密传输。
步骤:
- tcp三次握手之后,
- 客户端向服务器hello,里面携带有加密算法列表,
服务器选择认为最佳的算法之后,生成公钥和私钥,用证书(公钥)回复。(所以说,是在ssl第一次握手时就确定了用哪一种加密算法。) - 然后客户端生成一个随机数,用证书的公钥加密后发送给服务器,
- 服务器用私钥解密后得到随机数。
- 之后,服务器就可以把information+随机数 用之前商定好的算法进行对称加密。发送给客户端。
- 客户端收到后用之前确定的加密算法逆运算进行解密。
- 安全通信完成。
(1)中间经过了多次通信,内容格式分别是什么? SSL握手协议报文: 协议报文类型 + 报文长度 + 报文内容 (2)https协议开始的时候会切换加密算法,由非对称加密(RSA)切换为对称加密(AES),这个过程是怎么实现的? 首先,什么是非对称加密,什么是对称加密? 非对称加密:公钥加密的密文只有私钥可以解密;私钥只有一个人有公钥可以发给所有人。 对称加密:加密和解密都是通过同一个密钥进行的。
用非对称加密算法 协商 要用的对称加密算法是什么。 客户端 Client Hello ,携带加密列表。 服务器 Server Hello , 携带SSL证书。 客户端校验证书,如果证书可信,浏览器读取证书的公钥,确保是真正的公钥。 客户端用公钥对随机数进行加密,发送到服务器。这个加密数据只有私钥能解密。这就是非对称加密。 服务器收到后,用私钥解密,得到随机数。这时候,就使用对称加密了。将information和随机数用之前协商的加密算法,加密后,发送给客户端。 加密和解密都是通过这同一个随机数key。只要第三方不知道这个key,就是安全的。
SSL/TSL证书把公钥和私钥存到服务器中,公钥由客户端验证,私钥用于解密过程
(3)https是否能防御中间人攻击?如果可以,那他是怎么做到的
防御中间人攻击的方法是确保客户端收到的公钥是真正的公钥,不是被篡改的。
安全的获取公钥:SSL 证书(需要购买)和CA机构
SSL 证书中包含的具体内容有证书的颁发机构、有效期、公钥、证书持有者、签名,通过第三方的校验保证了身份的合法,解决了公钥获取的安全性 校验过程:
- 浏览器读取证书中的所有者、有效期等信息进行校验
- 浏览器查找操作系统内置的受信任的证书颁发机构CA,与服务器发来的证书的颁发者CA比对,校验证书是否为合格机构颁发
- 如果找不到,浏览器会报错,说明服务器发来的证书不可信任。
- 如果找到,浏览器会从操作系统中去除颁发者CA的公钥,对服务器发来的证书里面的签名进行解密。
- 浏览器使用相同的hash算法计算服务器发来的证书的hash值,与证书中的签名对比
- 对比结果一致则证明服务器发来的证书合法,没有被冒充。这时客户端可以读取证书的公钥用于后续加密。
|