http无状态明文传输,只要截获传输报文,就可以直接读取信息。
http使用端口80\orange{http使用端口80}http使用端口80
https在http基础上加入了ssl协议,ssl协议依靠证书验证服务器身份,并为报文加密。
https使用端口443\orange{https使用端口443}https使用端口443
关于加密方式:\red{关于加密方式:}关于加密方式:
对称加密\orange{对称加密}对称加密
加密密钥与解密密钥相同
非对称加密\orange{非对称加密}非对称加密
分为公钥和私钥,客户端公钥加密的报文,服务端可以用私钥解析。
https通信步骤:\red{https通信步骤:}https通信步骤:
(1)TCP三次握手:\orange{(1)TCP三次握手:}(1)TCP三次握手:
客户端发送SYN(syn=a),请求建立TCP连接。
服务端发送SYN(syn=b)和ACK(ack=a+1)包。
客户端发送ACK(ack=b+1)包,完成三次握手。
(2)HTTPS请求过程:\orange{(2)HTTPS请求过程:}(2)HTTPS请求过程:
客服端发送https请求(包括一个随机数,用于生成对称密钥,支持的加密算法,支持的通信协议版本)
服务端确认通信协议版本,确认加密算法,发送证书和一个随机数,用于对称加密
客户端验证服务器证书(验证证书的方法通常内嵌在客服端系统中),取出公钥,用公钥加密随机数,协商加密方式。
服务端收到随机数后,生成本次会话的会话密钥,发送握手结束通知,表示握手协商阶段结束。
(3)TCP四次挥手:\orange{(3)TCP四次挥手:}(3)TCP四次挥手:
客户端发送FIN,请求关闭。
服务端发送ACK
(中间可能由于拥塞,服务端丢包,所以不能直接发送FIN,要等所有包都收到后,服务端再发送FIN)
服务端发送FIN
客户端发送ACK