1. 我们的TCP 三次握手大概是长这样

2.那么为什么 TCP 要采取三次握手,而不是两次或其他

  首先我们要知道握手的目的:

  • 为了保证通讯双方建立的连接是可靠的。
  • 同时,为了保证性能,握手的次数要求尽可能少。

  那么什么才算是连接可靠?

  • 通讯双方建立的连接可靠”就是要确保双方的发送和接收功能都正常。

  以下图为例,在握手前,双方的发送和接收能力尚未确认。

  第一次握手:

  客户端向服务端发送信息。当服务端接收到信息后,服务端可以明确接收功能是正常的。

  第二次握手:

  服务端向客户端发送信息作为应答。当客户端接收到信息后,客户端可以明确发送和接受功能都正常。

  第三次握手:

  客户端向服务端发送信息,当服务端接收到信息后,服务端可以明确发送功能是正常的。

  通过三次握手,就能明确双方的收发功能均正常,也就是说,保证了建立的连接是可靠的。而且,由上可见,三次是确保连接可靠的最少次数,再就多余。

3.都知道HTTPS是比HTTP更安全的连接方式,但为什么HTTPS会更安全?

  • 因为HTTPS加入了SSL所以更安全,但为什么是SSL?

3.1我们先了解一下什么事对称加密,给大家讲一个故事。

古时候有两个人,一直通过写信相互联系

但他们总觉得邮差的样子很贼,害怕自己信件被偷看。

于是一次见面的时候,找来一个带锁的盒子和两把钥匙,商定每次寄信前都先锁上信件。

通过这种方式,他们觉得通信已经足够安全了。

直到有一天,其中一个人把钥匙弄丢了。

他想要发信通知另一人拷贝一把钥匙发回来,但深想,他没法将“拷贝一把新钥匙给我”这番话进行加密,也没法保证中途钥匙会不会被盗窃啊。

换言之,要继续维持原来的通信方式,只能约对方出来见面再拿新的钥匙了。

如果将这个问题放到当今的互联网,通讯前都要求两个人先见面取钥匙,那显然是不可能的。

于是有了非对称加密

3.2非对称加密

针对于上述钥匙交换的问题,人们想出了非对称加密的方式,简单来说,非对称加密有公钥和密钥,公钥可以公开由任何人持有,而私钥由自己持有。公钥加密的信息只能由对应的私密解密,同样,私钥加密的信息只能由对应的公钥解密。

利用这个特性,回到上面的例子,可以进行下面的通信方式:

1. 先将公钥交给邮差发送给对方

2. 对方使用公钥将信息加密之后将信息返回

3. 收到信件后,利用私钥对信息进行解密

这样就能保证信件的保密传递了。

而由于公钥是允许任何人知道的,如果用私钥将信息加密,被别人窃取后,可以通过公开的公钥来获取信息,所以通信前一定是先获取对方的公钥,只传递公钥加密后的信息。

这样足够安全了吗?并不。

如果有人截取通信,伪装成其中一方,发送伪造方的公钥,就能窃取通讯信息了。

认证机构和数字证书

为了保证通信者获取的公钥并没有被恶意替换,可以通过第三方认证机构来确认公钥是否可信。

那么这个认证和检验的过程是怎样实现的呢?

首先,通信的一方需要先向认证机构认证自己的身份。将自己的通讯公钥和一些个人信息发送给认证结构,然后认证机构利用自己的私钥来对这些信息加密,生成一份数字证书,这份证书就是用来证明这个人的身份的。

在浏览器中,系统默认就会装有一些认证机构的公钥,称之为顶级证书。

在通讯的时候,先发送数字证书,然后接收方利用顶级证书对这份数字证书进行解密,获得通讯的另一方的公钥,同时利用解密出来的信息进行比对,从而检验出解析出来的公钥是否属于通讯方。

流程如下:

这样,如果顶级证书没有被恶意替换,整个通讯流程就可以认为是安全的。

3.3优化通讯性能

再回顾上面的流程,

对称加密的弊端是难以安全地传递密钥。

非对称加密的弊端是加密和解密的花费时间长,如果通讯中所有数据都使用非对称加密,将会引起性能问题。

如果结合两者,使用机构认证和非对称加密的方式解决密钥传递的问题,使用对称加密的方式来解决加解密费时问题,就能达到性能优化的目的。

如果通讯双方分别是浏览器和服务器,通讯流程将如下:

1. 服务器先从认证机构申请数字证书

2. 浏览器访问网站,服务器返回数字证书

3.1. 浏览器利用内置的顶级证书解析服务器返回的数字证书得到服务器的公钥。

3.2. 然后浏览器生成一个对称加密的密钥。

3.3. 再利用服务器的公钥进行加密。

浏览器将加密后的密钥发送给服务器,服务器利用自己的私钥将其解密得到对称加密的密钥,双方将使用该对称加密的密钥进行通讯。

以上~

HTTPS和TCP协议三次握手设计的更多相关文章

  1. TCP 协议三次握手过程分析

    TCP 协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...

  2. TCP协议三次握手

    TCP协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: ...

  3. TCP协议三次握手和四次挥手

    http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对 ...

  4. TCP协议三次握手与四次挥手通俗解析

    TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字 ...

  5. TCP协议—三次握手四次挥手的原理<转>

    三次握手四次挥手的原理   TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的.三 ...

  6. TCP协议“三次握手”与“四次挥手”详解(上)

    在使用TCP协议进行数据的传输之前,客户端与服务器端需要建立TCP Connection,即建立连接,之后两端才能进行数据的传输. 下面堆TCP连接“三次握手”的过程进行说明. 1.相关概念 首先,我 ...

  7. TCP协议三次握手过程分析【图解,简单清晰】

    转自:http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是 ...

  8. TCP 协议三次握手过程解析带实例

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

  9. TCP协议三次握手过程分析

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

随机推荐

  1. 基于分支限界法的旅行商问题(TSP)一

    旅行推销员问题(英语:Travelling salesman problem, TSP)是这样一个问题:给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路.它是组合优化 ...

  2. Flask表单(Flask-WTF)

    1.request.from获取POST表单数据 # hello.py #coding:utf-8 from flask import Flask,request,render_template ap ...

  3. Robot Framework和Selenium简介

    1.1  RF简介 Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于 ...

  4. sqlilabs 5

    第一个1不断返回true,2可以进行更改?id=-1' union select 1,2,3 and '1?id=-1' union select 1,2,3 and 1='1 ?id=-1' uni ...

  5. Spring Boot常用注解总结

    Spring Boot常用注解总结 @RestController和@RequestMapping注解 @RestController注解,它继承自@Controller注解.4.0之前的版本,Spr ...

  6. 使用DOS命令关闭tomcat端口(其他服务也是可以的)

    废话不多说,直接上步骤: WIN+R 打开DOS窗口 输入netstat -ano|findstr 8080(其中8080是我自己tomcat的端口号) 之后可以看到端口号的最后会有数字,这个数字是端 ...

  7. QT5:C++实现基于multimedia的音乐播放器(二)

    今天接着上一篇来实现播放器的槽函数. 先来实现播放模式,槽函数如下: //播放模式 void Music::musicPlayPattern() { //z=++z%3; ) { //顺序播放 pla ...

  8. File文件操作学习总结

    1.java.io.file用于表示文件(目录),也就是说程序员可以通过File类在程序中操作硬盘上的文件和目录, 2.File类只能用于表示文件(目录)的信息(名称和大小),不能对文件内容进行访问. ...

  9. ThinkPHP5+Apicloud+vue商城APP实战

    ThinkPHP5+Apicoud+vue商城APP实战 目录 章节1:项目概述 课时1apicloud平台介绍.04:38 课时2知识体系架构介绍.16:10 章节2:apicloud50分钟快速入 ...

  10. 最简单易懂的SpringCloudSleuth教程

    事务mapjvm 大佬对下面的说法是否同意呢 能否比较下zipkin,pinpoint,以及skywalking.该如何选型 回答: 他们都提供了分布式服务跟踪的能力,pinpoint以及skywal ...