https与http学习总结。

http和https是两种不同的网络传输协议。

http协议的概念

http协议全程为Hyper Text Transfer Protocol。超文本传输协议。位于TCP/IP四层模型当中的应用层。

通过请求/响应的方式,在客户端和服务端之间进行通信。但是不够安全。

它的信息传输方式完全是以明文的方式,不做任何加密。相当于在网络上“裸奔”。有可能被中间人恶意截取或者篡改,这种就是中间人攻击。

1>对称加密。约定一个随机生成的**,在后续的通信中,信息的发送方都用**对信息进行加密,信息接收方通过一样的**进行解密。(之前写的js加密算法

但是!虽然我们在后续的通信中对明文进行了加密。但是第一次约定加密方式和**的通信仍然是明文,如果第一次通信就已经被拦截,那么**就会泄漏给中间人,中间人仍然可以解密后续的所有通信。

2>非对称加密。为**的传输加一层额外的保护。非对称加密的一组秘钥对中,包含一个公钥和一个私钥。明文可以用公钥加密/私钥加密,也可以用私钥加密/公钥解密。

a和b建立通讯

b首先把自己的公钥key1发给a。

a收到公钥后,自己生成一个用于对称加密的**key2。用接收到的key1对key2进行加密。发送给b。

b利用自己非对称加密的私钥,解开公钥key1的加密,获得key2的内容。

从此,a,b就可以利用key2进行对称加密的通信了。

这样即使中间人一开始截获了公钥key1,由于不知道私钥也无从解密。

但是!也有弊端。

中间人虽然不知道私钥,但是截获了公钥key1之后,却可以偷天换日,自己另外生成一对公钥私钥,把生成的key3给a.

a不知道被换过。以为key3就是b的公钥,于是按照之前的流程。用key3加密了key2,发送给了b。

中间人截获,用自己的私钥解开key3的加密,获得key2,在用当时的key1重新加密,发送给b。、

这样一来,虽然ab的通信用key2进行了加密,但是中间人已经掌握了key2,可以轻松解密。

所以!

我们有必要引入第三方,一个权威的证书颁发机构(CA)来解决。

什么是证书?

https与http学习总结。

 

图源来自公众号程序员小灰。只列出了一些关键信息。

a-客户端。 b-服务端。 c-证书颁发机构。

1>服务端b —— 自己公钥key1发给c —— c申请证书。

2>c有自己的一对公钥私钥,用私钥加密key1,通过服务端网址等信息生成证书签名,证书签名同样经过机构的私钥加密。

制作完成后,c把证书传给b。

3>当a请求通信的时候。b不再直接返回自己的公钥key1,而是把申请的证书返回给a。

4>a收到证书,要先去验证证书的真伪。需要说明的是,各大浏览器和操作系统已经维护了所有权威证书机构的名称和公钥。a只需要知道是哪个机构颁布的证书,就可以从本地找到对应的机构公钥,解密证书的签名。

a按照同样的签名规则,自己也生产一个证书签名、如果两个签名一样,那么证书就是有效的。

验证成功后,a就可以利用机构的公钥解密b的公钥key1了。

5>然后像之前一样,a生成自己的对称加***key2,用b的key1加密key2,发送给b。

6>b用自己的私钥解密,得到key2。两人用key2进行对称加密的通信。

 

中间人可以偷换证书吗?

证书的签名是由服务端网址等信息生成的。而且经过机构的私钥加密。中间人无法篡改,而且发假证书也无法验证通过。

这就是https的主体思想。

在http协议的基础上增加了SSL安全层。

刚才一系列的认证流程都是在SSL层中完成的。

 

 

附加:

TCP/IP协议体系概述

TCP/IP是指传输控制协议/网际协议。是针对Internet开发的一种体系结构和协议标准。其目的在于解决计算机网络的通信问题。使得网络在互连时把技术细节隐藏起来,为用户提供一种通用、一致的通信服务。

通常所说的TCP/IP协议实际上包含了大量的协议和应用,并且由多个独立定义的协议组合在一起。因此更确切的说,TCP/IP是一个协议族而不是一种协议。

应用层 比如HTTP、FTD、DNS
传输层 比如TCP、UDP、RTP、SCTP
网络互联层 对于TCP/IP这就是因特网协议
网络接口层 比如WI-FI、MPLS