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线程之线程通信

    前面提到多线程操作会有一个资源共享问题. 日常生活中,对于一个超市,有供货商往超市运货,有消费者从超市取货,供货商和消费者都与超市 建立了某种连接,超市就相当于公共资源,而他们的这种行为放到线程上说就 ...

  2. C# 获取文件下载的各种方法

    public class RemoteDownload { public static void DownLoad(string addressUrl,string localName) { //下载 ...

  3. PHP session有效期session.gc_maxlifetime详解

    一个已知管用的方法是,使用session_set_save_handler,接管所有的session管理工作,一般是把session信息存储到数据库,这样可以通过SQL语句来删除所有过期的sessio ...

  4. Reactor三种线程模型与Netty线程模型

    文中所讲基本都是以非阻塞IO.异步IO为基础.对于阻塞式IO,下面的编程模型几乎都不适用 Reactor三种线程模型 单线程模型 单个线程以非阻塞IO或事件IO处理所有IO事件,包括连接.读.写.异常 ...

  5. laravel5.4生成验证码

    laravel5.4生成验证码   总结:本篇博客介绍使用gregwar/captcha实现验证码的具体操作步骤,以及可能遇到的问题和解决办法. 转载请注明出处!!!本文地址:http://www.c ...

  6. larave5.4自定义公共函数的创建

    原文地址:http://blog.csdn.net/qq_38125058/article/details/76862151 公共函数,简单来说就是在任何地方都可以直接使用这个函数.简单介绍两种实现方 ...

  7. scrapy中 Mongo的存储

    import pymongo MONGO_HOST = 'localhost' MONGO_PORT = 27017 MONGO_DB = 'today' MONGO_COLL = 'mm' clas ...

  8. Oracle聚合函数

    max(),min(),avg(),sum() 其中 avg(),sum()只能操作数字  , max(),min()能操作数字.日期.字母 等.

  9. GO安全并发之无锁原子操作

    声明:本文是<Go并发编程实战>的样章,禁止以任何形式转载此文. 摘要: 我们已经知道,原子操作即是进行过程中不能被中断的操作.也就是说,针对某个值的原子操作在被进行的过程当中,CPU绝不 ...

  10. VirtualBox不能为虚拟电脑打开一个新任务——The VirtualBox kernel modules do not match this version of VirtualBox

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=608 一.问题产生的环境 物理机操作系统:Ubuntu 17.10 (Ubuntu版本查看命令: cat /etc/ ...