HTTPS和TLS

来源:互联网 发布:linux redis 命令大全 编辑:程序博客网 时间:2024/06/04 19:30

现在很多数据的传输都开始采用https协议,而且,据说谷歌将在其浏览器强制推行https协议,苹果也有强制推行https,ios上应用的http协议已经成为了过去,http被https取代已经是大势所趋。本质上,https协议可以说是http协议+TLS,那么,TLS是什么,为什么要放弃原本的http,而需要在http上加一层壳,采用https呢?

http协议,可以说是网络传输过程中最重要的协议之一,但是其传输过程存在很大的安全隐患。可能存在数据泄露,被篡改等问题。大家在访问一些应用或网站的时候,经常会发现屏幕的某个地方存在一些“不正常的”广告,很多应用会因为这个问题用户投诉,笔者的朋友曾在有派进行移动端的开发,曾因为app服务器被dns劫持,而在应用的很多地方被插入广告,遭到大量投诉,事实上,被dns劫持的事情时有发生,劫持后常常会在html文档中插入一些js脚本,特别是常常被运营商劫持。

其实TLS的早期版本有另外一个名字,SSL。但是SSL的早期版本存在很多问题,所以用户一直很少,这个情况一直到上个世纪九十年代后期,SSL的版本较为完善,用户一下多了起来,于是,SSL被改名为TLS,这可能是想让用户忘记早期SSL的槽糕印象吧。

理解了取代http的必要性和TLS和SSL和关系,下面就来了解一下https,主要是https的流程。

首先是单向验证,即客户端会对服务器进行身份验证。

1.客户端访问服务器端前,会将本地的加密算法列表,http版本列表以及生成的一个随机字符串发送到服务器端,常伟16位或32位。加密算法列表,即支持的加密算法类型,数据加密一般使用对称加密的方式,常见的算法有AES-128,AES-256,DES等。

2.服务器端接收到客户端的消息后,会根据自己的加密算法列表,匹配“最优”的算法,并匹配http版本,同时,生成一个随机字符串,将这些信息加上自己的签名公钥发送到客户端。

3.现在客户端和服务器端都有两个随机字符串。客户端拿到server的签名公钥后,先去CA进行验证,若验证通过,确定了server的身份没有被冒充。客户端就会和server端一样,利用两个随机字符串,经过复杂的算法,生成对称加密的密钥,这个过程采用的算法有效保证server和client生成的密钥是相同。


关于双向认证,其实和单项认证类似。一般在金融行业应用比较多,服务器需要对client进行身份认证。双向认证代价比较大,若是向CA购买一套密钥认证是需要一定的金额,若是给一个超过千万用户的应用每个客户生成一套密钥,代价将会非常昂贵。所以,有些公司采用只使用一套密钥,如有派。当然,也有自定义签名证书,如12306。




0 0
原创粉丝点击