您的位置:首页 > 理论基础 > 计算机网络

http和https的加密方式

2019-06-18 16:32 447 查看

一  什么是http协议?

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。位于TCP/IP四层模型中的应用层。

HTTP协议通过客户端请求-->服务端响应的方式进行通信。但是HTTP有一个致命的缺点就是:不够安全。

HTTP协议的信息传输完全以明文的方式,不做加密,相当于在网络上裸奔。这样就会导致如下情况:

小A是客户端,小B时服务端,有一天小A试图给小B发送请求,但是由于传输信息是明文,这个信息可能被某个中间人恶意篡改,这种行为叫做中间人攻击。

 

如果进行加密呢?

小A和小B可以事先约定对称加密的方式,并且确定一个随机生成的秘钥,后续的通讯中,信息都是使用秘钥的对称加密,信息接收方通过同样的秘钥进行信息解密.

 

这样做是不是就会绝对安全了呢?并不是,虽然我们在后续的通讯中,对明文进行了加密,但是第一次约定加密方式和秘钥还是明文的,如果第一次被中间人拦截,那么中间人仍然可以通过秘钥进行解密信息内容。

HTTPS的加密算法

      非对称秘钥:非对称加密算法需要两个密钥:公开秘钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

首先需要小B把自己的公钥key1发送给小A:

小A收到小B的公钥key1以后,小A自己生成一个对称加密的秘钥key2,并且用key1对key2进行加密,发送给小B:

小B接收到了小A发送给自己的非对称加密的私钥,然后用自己的私钥解开key1拿到里面key2,然后就可以用key2进行加密通信了。在通信中,即使中间人拿到key1,但是不知道key1的私钥是什么,也无法得到key2。

 

这种情况会绝对安全的吗?

并不是,中间人虽然不知道小B的key1私钥是什么,但是截取了小B的key1之后,却可以偷天换日,自己生成一对公钥和私钥,然后把自己的公钥key3发送给小A。

小A不知道公钥key1被偷偷换过,以为key3就是小B发送的公钥,所以用key3加密自己生成的非对称密钥key2发送给小B

这一次再次被中间人截取,中间人先用自己的私钥解密key3拿到key2,然后再用截取小B的key1对key2进行加密,发送给小B。

这样中加人再次拿到了key2.

 对称秘钥:对称密钥加密又叫专用密钥加密,即发送和接收数据的双方必使用相同的密钥对明文进行加密和解密运算。通常有两种模式:流加密和分组加密。这个时候需要加入第三方,一个权威的证书颁发机构(CA)来解决。那么到底怎么解决的呢?

1 作为服务端到的小B,首先把自己的公钥key1发送证书颁发机构,向证书颁发机构申请证书。

2 证书颁发机构自己也有一对公钥和私钥,机构利用自己的私钥加密key1,并且通过服务端的网址等信息生成一个证书签名,证书签名同样经过私钥加密,然后把证书发送给小B。

3 当小A向小B发送请求通信的时候,小B不在把自己的公钥key1发送回去,而是把自己申请的证书发送给小A。

4 小A拿到证书后,第一件事就是验证证书的真伪,因为各大浏览器已经维护了所有权威证书机构的名称和公钥。所以小A只需要是哪家机构的证书,就可以从本地找到对应机构的公钥,解密出证书的签名,接下来销毁按照同样的签名规则,自己也生成一个证书签名,如果来个签名一致,说明这个证书是有效的。验证成功后,小A就可以利用机构的公钥解密出key1。

 

 

 

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: