老师这个是我自己学习的,同时我也上传过这篇文章到我的博客,如果您想要验证,可以在博客中搜索ssl就可以查到这篇文章了

两者表面的区别

  1. HTTP(Hypertext Transfer Protocol)是超文本传输协议,信息是明文,HTTPSHypertext Transfer Protocol Secure则是既有安全性的SSL加密传输协议。基本可以理解为在HTTP的传输基础上加入SSL层来加密信息。两者请求和响应都是已相同的方式进行工作。
  2. HTTP采用80端口连接,HTTPS采用443端口连接qi
  3. HTTP与HTTPS连接方式不同
  4. HTTPS在连接中需要CA证书认证身份,一般需要money购买
  5. HTTP连接是无状态的,可以短连接也可以长连接,更加灵活;HTTPS协议是由SSL+HTTP协议构建的可加密传输,身份认证的网络协议,虽然建立连接变得复杂但是更加安全,需要多次握手,所以一般会加剧50%时间延迟,且会消耗 CPU 资源,对服务器资源消耗较大

HTTP和HTTPS建立连接方式

HTTP建立连接

TCP三次握手

==TCP三次握手(Three-way Handshake)==
TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。“即互联网中TCP/IP就可以满足信息通信,但是想要识别传输的信息是否有意义,我们就需要应用层协议”

TCP提供的可靠数据传输服务,是依靠接收端TCP软件按序号对收到的数据分组进行逐一确认实现的。这个过程在TCP收发端开始通信时,被称为三次握手初始化。
三次握手的目的是使收发端的数据发送和接收同步,协调可以收发的数据量,建立虚连接。双方的TCP协议软件在交换数据时必须首先建立会话连接,然后才能够以数据分组为单位进行通信。接收端TCP协议软件每收到一个数据分组,在检验传输无误后,就对发送端计算机发送确认信息(ACK,Acknowledgement),通知该序号分组收到。
数据传输过程中,发送端对已经发出的分组要有记录,并且设置等待确认的计时器,对超过规定时间未收到确认的分组按照丢失重传处理;接收端的TCP协议软件会自动检查是否所有的数据分组都已收到,如果发现哪个数据分组损坏,接收端会将它舍弃,并通知发送端重传;接收端的TCP协议软件还能对未按顺序到达的数据分组进行重新排序,解决乱序问题。
收发端TCP协议软件进行带确认的数据传送过程如所示。在图中,发送端将序号为100的数据分组(SEQ=100)送出;接收端收到后,向发送端回应一个序号为200的分组(SEQ=200),内容是对收到序号为100的数据分组的确认,确认信息是对收到的数据分组序号加1(ACK=101);发送端得知序号100的分组收到后,发送下一个数据分组(序号为101, SEQ=101),并且在该分组中带有对收到序号为200的回应分组的确认(仍然是对收到的分组序号加1,ACK=201)。
最后,当接收端计算机的TCP协议软件确认收到的数据分组无误,就根据封装在分组头部的目的端口号,识别出目的应用程序,将分组中的数据取出并按照原来顺序组合好交付给相应程序。

FROM:TCP协议的作用?-IT_xiao小巫

  • 初始状态:A,B都属于初始状态都是关闭状态
  • 状态变化:A主动打开连接,B被动打开连接并进入监听状态
  • 第一次握手:A向B发送一个TCP包,其中包中SYN标志设置为1,表明A向B请求建立连接,并设置序号seq=x,其中x的值表示第一个数据字节序号为x(x不确定,即seq是个随机值)。
    注意:SYN包就是SYN标设为1的TCP包,只有A收到B发来的SYN包,才可以建立连接,否则无法建立连接。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不能让外部任何主机主动建立连接。
  • 状态变化:A进入SYN_SEND状态,等待B的确认
  • 第二次握手:B如果同意建立连接,会向A发送一个对A发送的SYN包的确认(SYN/ACK)包, 确认号ack=x+1,初始序号seq=y(随机值)
    注意:SYN/ACK包是仅SYN 和 ACK 标记为1的包。这个报文也不能携带数据,但是同样要消耗一个序号。
  • 状态变化:B进入SYN-RCVD状态(同步收到)
  • 第三次握手:A收到B的确认TCP报后,向B发送一个确认收到B发送的确认报,其中确认报确认报文段(ACK=1,确认号ack=y+1,序号seq=x+1)
  • 状态变化:A接到B的确认报文进行检查后变为ESTABLISHED(已建立连接)
  • 状态变化:当B收到A的确认报文进行检查后变为ESTABLISHED(已建立连接)
    注意:A收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并且此时操作系统为该TCP连接分配TCP缓存和变量,并将该数据包发送给B,B检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功。

FROM:TCP三次握手详解-Shirsen
FROM:注意!是TCP不是HTTP的3次握手与4次挥手-鲍康霖

三次握手的目的是连接服务器指定端口,建立 TCP连接,并同步连接双方的序列号和确认号,交换 TCP窗口大小信息。在 socket 编程中,客户端执行 connect() 时。将触发三次握手。

HTTPS通信中存在问题

  1. 容易被监听
    http通信都是明文,数据在客户端与服务器通信过程中,任何一点都可能被劫持。比如,发送了银行卡号和密码,hacker劫取到数据,就能看到卡号和密码,这是很危险的
  2. 被伪装
    http通信时,无法保证通行双方是合法的,通信方可能是伪装的。比如你请求www.taobao.com,你怎么知道返回的数据就是来自淘宝,中间人可能返回数据伪装成淘宝。
  3. 被篡改
    hacker中间篡改数据后,接收方并不知道数据已经被更改

HTTPS连接方式

==https是http与ssl的结合体==

客户端与服务器获取验证的通信过程

  • 客户端发送请求到服务器端
  • 服务器端返回证书和公开密钥,公开密钥作为证书的一部分而存在
  • 客户端验证证书和公开密钥的有效性,如果有效,则生成共享密钥并使用公开密钥加密发送到服务器端
  • 服务器端使用私有密钥解密数据,并使用收到的共享密钥加密数据,发送到客户端
  • 客户端使用共享密钥解密数据
  • SSL加密建立………