连接方式不同
-
http:很简单,无状态(TCP三次握手)
-
https:可加密 身份认证的网络协议(SSL+TCP)
TCP连接 (三次握手);
举个简单例子;
我(用户)去银行取钱,对银行的工作人员(服务器)说我要取一个亿(发送一个SYN)
工作人员会说确定吗(这里接收到了请求,并且返回一个ACK+SYN)
之后我(用户)就会说确定(接收到了返回的信息并且会返回一个ACK),然后就开始服务。这就是三次握手。
- 第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN©,此时客户端处于 SYN_SENT 状态
- 第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,为了确认客户端的 SYN,将客户端的 ISN+1作为ACK的值,此时服务器处于 SYN_RCVD 的状态
- 第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,值为服务器的ISN+1。此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了连接
SSL连接
SSL超链接
网站在使用HTTPS协议之前,需要向CA机构申请一份数字证书;
数字证书中包含证书持有者的信息、公钥信息等可以证明服务器身份的信息;
数字签名的制作过程
-
CA机构本身拥有一对非对称加密的公钥和私钥;
-
CA机构对证书明文数据A进行hash散列加密;
-
对hash散列之后的值使用私钥加密,得到数字签名B;
这样,明文和数字签名共同组成了数字证书,这样一份数字证书就可以颁发给网站了;
然后服务器在接收客户端请求后,将这个数字证书发送给客户端,客户端会用以下方式验证公钥是否正确;
客户端的验证过程
- 客户端拿到证书,得到明文A,签名B;
- 用CA机构的公钥对B解密,得到B’,
- 使用证书里面指明的hash算法对明文进行hash处理得到A’;
- 通过上述步骤,如果A’等于B’,那么证书可信;
- 客户端向服务器发送HTTPS请求,服务器将公钥以证书的形式发送到客户端(服务器端存放私钥和公钥)。
- 明文数据A-hash散列加密-私钥加密=》数字签名B
浏览器生成一串随机数,然后用公钥对随机数和hash签名(数字签名?)进行加密,加密后发送给服务器;服务器用私钥解密,取出字符串和hash签名再通过私钥加密后发送给客户端。 - 客户端用公钥对密文进行解密并判断是否被篡改,如果没有篡改,客户端向服务器端发出信息,协商后面的数据通讯将使用生成的随机字符串做为秘钥进行对称密钥,同时通知服务器握手结束。服务器接受到信息后,响应协商的加密秘钥并通知客户端握手结束。
补充:
发送HTTP请求
浏览器会将请求包装成请求报文,如 GET / HTTP/1.0 (请求的方法 请求的URL 请求所使用的协议)
TCP报文格式
SIN:1代表建立连接
FIN:结束
三次握手
-
SYN=1(建立连接,seq=随机数100)
-
SYN=1,seq=随机数200,ACK=1(有效连接),ack=随机数100+1
—此时:客户端确认服务端发送,接收没问题 -
ACK=1,ack=随机数200+1
-此时:双工
三次握手的作用如下:
客户端:发送您SYN报文(服务端收到:客户端的发送能力、服务端的接收能力正常)
服务端:发送SYN+ACK(客户端收到:服务端的接收、发送能力,客户端的接收、发送能力是正常)
客户端:发送ACK(服务端收到:客户端接收成功,服务端收到就建立连接)
通过三次握手,就能确定双方的接收和发送能力是正常的。之后就可以正常通信了
关闭TCP连接(四次挥手);
举个例子:
客户说我处理完我要做的事情了(发送一个FIN)
工作人员说收到(发送ACK);我也处理完我要做的事情了
然后客户会说我没有想办理的业务了,再见吧;
工作人员说好的。至此进入TIME_WAIT状态(保留现场业务信息),等到2MSL后,才把这个柜台信息清理了(连接最终关闭,并且把业务信息都清理了)。
四次挥手:
- 客户端:发送FIN包
FIN=1(断开),seq=报文数25 - 服务端:发送ACK包
ACK=1(确认收到),ack=报文时25+1 - 服务端:发送FIN包
FIN=1(服务器准备好,发送断开),seq=99 - 客户端:发送ACk 等待两秒 断开
ACK=1,ack=99+1