(转载)图解https通信过程,为什么https更安全?

最近看到一个问题:http和https的区别,在了解的时候翻到了一篇讲得很清楚的文章,手打一遍加深记忆。

参考:http://www.liqwei.com/network/protocol/2012/906.shtml

 

一、图解

HTTPS其实是由两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。

服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的,且看下图。

20121130144420002

(1)客户端发起https请求

就是简单地发起请求,和http没什么两样。用户在浏览器中输入一个https网址,就会尝试连接服务端的443端口(http会访问80端口)。

(2)服务端的配置

采用https协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。

区别是:自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。

这套证书其实就是一对公钥私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,全世界只有你一个人有这把钥匙。你可以把锁头(公钥)传给别人,别人可以用这个锁把重要的东西锁起来,然后发给你。因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

(3)传送证书

公钥只是证书的一部分。完整的证书包含了公钥、证书的颁发机构、过期时间等等信息。

(4)客户端解析证书

这部分工作是有客户端的tls(安全传输层协议)来完成的。

首先,会验证公钥是否有效,比如颁发机构,过期时间等等。如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密。接着,把随机值用锁头(公钥)锁起来,这样除非有钥匙(私钥),不然看不到被锁住的内容。

(5)传送加密信息

这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

(6)服务段解密信息

服务端用私钥(服务端保留的私钥)解密收到的信息后,就能得到客户端传过来的随机值(客户端传来的私钥),然后把内容通过该值进行对称加密(所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容)。因为客户端和服务端都知道这个私钥(客户端传来的私钥),所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

(7)传输加密后的信息

这部分信息是服务端用私钥加密后的信息,可以在客户端被解密还原。

(8) 客户端解密信息

客户端用之前生成的私钥解密服务端传过来的信息,最后获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

二、为什么https比http更安全?

首先要知道,http根本就没有安全性可言。我们可以用wireshark自己抓一下网站的访问数据包/返回数据包,凡是http请求的数据,基本都是以明文的形式呈现的,只要整个传输过程中有任何第三方能够截获你的数据包(比如从上游的路由器),就能获取想要的任何数据。

至于https,整个传输过程中传递的数据包都是加密的。第三方只能在1、3、5、7步截取到数据包(1是访问的地址信息,3是证书(大家都有),5、7都是加密后的数据)。由于缺少两种秘钥,这些信息对攻击者来说都是无用的,这就保证了数据传输的安全。

那么问题来了,https是否绝对意义上的安全呢?答案是否定的,要注意“慎防内鬼”。举个例子,假如客户端浏览器存在漏洞,可以获取第4步生成的随机值,并且给攻击者得知,那么整个加密过程就失去意义了。如果服务端存在内鬼,知道服务端自带的私钥,那么就能解密第5步传来的数据,获取客户端的私钥,那么整个传输过程(对攻击者而言)就是透明的。

三、总结

了解一下区别。

发表评论

电子邮件地址不会被公开。 必填项已用*标注