Http和Https的区别/握手协议/单双认证

HTTP与HTTPS有什么区别?

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。

简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。


HTTPS的优点

正是由于HTTPS非常的安全,攻击者无法从中找到下手的地方,从站长的角度来说,HTTPS的优点有以下2点:

1、SEO方面

谷歌曾在2014年8月份调整搜索引擎算法,并称“比起同等HTTP网站,采用HTTPS加密的网站在搜索结果中的排名将会更高”。

2、安全性

尽管HTTPS并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但HTTPS仍是现行架构下最安全的解决方案,主要有以下几个好处:

(1)、使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;

(2)、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。

(3)、HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

HTTPS的缺点

虽然说HTTPS有很大的优势,但其相对来说,还是有些不足之处的,具体来说,有以下2点:

1、SEO方面

据ACM CoNEXT数据显示,使用HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电,此外,HTTPS协议还会影响缓存,增加数据开销和功耗,甚至已有安全措施也会受到影响也会因此而受到影响。

而且HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。

最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。

2、经济方面

(1)、SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

(2)、SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗(SSL有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用)。

(3)、HTTPS连接缓存不如HTTP高效,大流量网站如非必要也不会采用,流量成本太高。

(4)、HTTPS连接服务器端资源占用高很多,支持访客稍多的网站需要投入更大的成本,如果全部采用HTTPS,基于大部分计算资源闲置的假设的VPS的平均成本会上去。

(5)、HTTPS协议握手阶段比较费时,对网站的相应速度有负面影响,如非必要,没有理由牺牲用户体验。


https大致过程

  1. 建立服务器443端口连接
  2. SSL握手:随机数,证书,密钥,加密算法
  3. 发送加密请求
  4. 发送加密响应
  5. 关闭SSL
  6. 关闭TCP

SSL握手大致过程:

  1. 客户端发送随机数1,支持的加密方法(如RSA公钥加密)
  2. 服务端发送随机数2,和服务器公钥,并确认加密方法
  3. 客户端发送用服务器公钥加密的随机数3
  4. 服务器用私钥解密这个随机数3,用加密方法计算生成对称加密的密钥给客户端,
  5. 接下来的报文都用双方协定好的加密方法和密钥,进行加密

SSL握手详细过程:

一、客户端发出加密通信请求ClientHello

提供: 
1,协议版本(如TSL1.0) 
2,随机数1(用于生成对话密钥) 
3,支持的加密方法(如RSA公钥加密) 
4,支持的压缩方法

二、服务器回应SeverHello

回应内容: 
1,确认使用的加密通信协议版本(TSL1.0) 
2,随机数2(用于生成对话密钥) 
3,确认加密方法(RSA) 
4,服务器证书(包含非对称加密的公钥) 
5,(可选)要求客户端提供证书的请求

三、客户端验证证书

如果证书不是可信机构颁布,或证书域名与实际域名不符,或者证书已经过期,就会向访问者显示一个警告,是否继续通信

四、客户端回应

证书没有问题,就会取出证书中的服务器公钥 
然后发送: 
1,随机数3(pre-master key,此随机数用服务器公钥加密,防止被窃听) 
2,编码改变通知(表示随后的信息都将用双方商定的方法和密钥发送) 
3,客户端握手结束通知

五、双方生成会话密钥

双方同时有了三个随机数,接着就用事先商定的加密方法,各自生成同一把“会话密钥” 
服务器端用自己的私钥(非对称加密的)获取第三个随机数,会计算生成本次所用的会话密钥(对称加密的密钥),如果前一步要求客户端证书,会在这一步验证

六、服务器最后响应

服务器生成会话密钥后,向客户端发送: 
1,编码改变通知(后面的信息都用双方的加密方法和密钥来发送) 
2,服务器握手结束通知

至此,握手阶段全部结束,接下来客户端与服务器进入加密通信,用会话密钥加密内容


关于单双认证

一般来说,我们正常访问的都是https都是单向认证,也就是说,客户端会对服务器的

证书进行校验,并且给客户端发送公钥。来回交互的数据都是密文传输的。

在部分情况下,比如企业内部访问考虑使用双向认证,双向认证比单项认证多了一环,也就是服务器也会对客户端的证书进行校验,并且需要客户端像服务器端也提供公钥。

总结下就是,

单项认证,只用客户确定客户访问的网站是对的不是假的,且数据加密交互服务端和的客户端数据。

双向认证,是客户确定访问的网站是不是对的,证书安全不安全的之后,服务端也要确定客户是不是我认证的,允许访问的客户。双方都确定后身份正确后,在把数据加密传送



关于单项认证和双向认证的有关可以看看这篇博文:

http://blog.csdn.net/duanbokan/article/details/50847612

关于双向的https代码层可以看看这个:

http://blog.csdn.net/dtlscsl/article/details/50118225

https://www.cnblogs.com/dreamingodd/p/7491098.html

测试一下单双认证的代码:

http://blog.csdn.net/zbuger/article/details/51695582

猜你喜欢

转载自blog.csdn.net/zxysshgood/article/details/79126735