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. Java虚拟机-类加载

    虚拟机把描述类的数据从Class文件加载到内存,并对数据进行检验.转换解析和初始化,最终形成了可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制.在Java语言里,类型的加载.连接和初始化过 ...

  2. JSON数据Key排序

    /// <summary> /// JSON格式化重新排序 /// </summary> /// <param name="jobj">原始JS ...

  3. AE的空间分析(转载)

    1.1 ITopologicalOperator接口 1.1.1 ITopologicalOperator接口简介ITopologicalOperator接口用来通过对已存在的几何对象做空间拓扑运算以 ...

  4. C#备份及还原数据库的实现

    使用前要导入SQLDMO.dll 下载地址:http://down.51cto.com/data/853937 1.在用户的配置时,我们需要列出当前局域网内所有的数据库服务器,并且要列出指定服务器的所 ...

  5. JAVA小记 (1)

    JVM: Java虚拟机  JVM个数取决于同时执行的程序个数 JDK:JAVA 开发工具包 Java利用JVM实行跨平台 JRE:Java运行环境 JavaSE:企业版 GC:垃圾回收机制 命名规范 ...

  6. Docker 多主机网络总结(非常全)

    PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...

  7. C++ 模板基础

    我们学习使用C++,肯定都要了解模板这个概念.就我自己的理解,模板其实就是为复用而生,模板就是实现代码复用机制的一种工具,它可以实现类型参数化,即把类型定义为参数:进而实现了真正的代码可重用性.模版可 ...

  8. Makefile基础---编译

    首先写一个自己的库: #include "../MyAPI.h" #include <cstdlib> #include <ctime> int getRa ...

  9. 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装

    在asp.net项目中,添加一个[一般处理程序]来处理请求是很自然的事,这样会得到一个实现自IHttpHandler的类,然后只需在ProcessRequest方法中写上处理逻辑就行了.但是这样的一个 ...

  10. 'version' contains an expression but should be a constant

    [WARNING] Some problems were encountered while building the effective model for com.app:cache:jar:4. ...