《图解http协议》之HTTPs学习笔记

对于IP协议,并不陌生。TP协议是TCP/IP协议簇中的核心协议,也是TCP/IP的载体。全部的TCP,UDP,ICMP及IGMP数据都以IP数据报格式传输。IP提供不可靠的,无链接的数据传送服务。IP协议的做用是把各类数据报传送给对方。要保证确实传送到对方那里,须要知足两个重要条件:IP地址和MAC地址。
IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址.git

1、HTTP的缺点

1.通讯使用明文(不加密),内容可能被窃听

解决办法:
通讯的加密:http协议经过和SSL或TLS的组合使用,加密http的通讯内容。
内容的加密:对http报文里所含的内容进行加密,客户端须要对http报文进行加密处理后再发送请求。算法

2.不验证通讯方的身份,所以可能遭遇假装

其实任何人均可以发起请求,而服务器只要接收到请求,无论对方是谁都会返回一个响应。(限于:发送端的IP地址和端口号没有被服务器设定限制访问的前提下)
证书:第三方,能够证实服务器和客户端实际存在。只要能确认通讯方(服务器或客户端)持有的证书,就能够判断通讯方的真实意图。浏览器

3.没法证实报文的完整性,因此有可能已遭篡改

中间人攻击。使用MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。缓存

2、HTTPS

HTTP+加密+认证+完整性包含=HTTPS,HTTP加上加密处理和认证以及完整性保护后便是HTTPS.

HTTPS并不是是应用层的一种新协议,只是HTTP通讯接口部分使用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议替代而已。
而SSL是采用一种公钥加密的加密处理方式。安全

3、SSL协议通讯过程

(1) 浏览器发送一个链接请求给服务器;服务器将本身的证书(包含服务器公钥S_PuKey)、对称加密算法种类及其余相关信息返回客户端;服务器

(2) 客户端浏览器检查服务器传送到CA证书是否由本身信赖的CA中心签发。如果,执行4步;不然,给客户一个警告信息:询问是否继续访问。网络

(3) 客户端浏览器比较证书里的信息,如证书有效期、服务器域名和公钥S_PK,与服务器传回的信息是否一致,若是一致,则浏览器完成对服务器的身份认证。函数

(4) 服务器要求客户端发送客户端证书(包含客户端公钥C_PuKey)、支持的对称加密方案及其余相关信息。收到后,服务器进行相同的身份认证,若没有经过验证,则拒绝链接;性能

(5) 服务器根据客户端浏览器发送到密码种类,选择一种加密程度最高的方案,用客户端公钥C_PuKey加密后通知到浏览器;网站

(6) 客户端经过私钥C_PrKey解密后,得知服务器选择的加密方案,并选择一个通话密钥key,接着用服务器公钥S_PuKey加密后发送给服务器;

(7) 服务器接收到的浏览器传送到消息,用私钥S_PrKey解密,得到通话密钥key。

(8) 接下来的数据传输都使用该对称密钥key进行加密。

上面所述的是双向认证 SSL 协议的具体通信过程,服务器和用户双方必须都有证书。因而可知,SSL协议是经过非对称密钥机制保证双方身份认证,并完成创建链接,在实际数据通讯时经过对称密钥机制保障数据安全性

4、https协议应用实例(取自《大型网站的https实践》)

HTTP 自己是明文传输的,没有通过任何安全处理。例如用户在百度搜索了一个关键字,好比“苹果手机”,中间者彻底可以查看到这个信息,而且有可能打电话过来骚扰用户。也有一些用户投诉使用百度时,发现首页或者结果页面浮了一个很长很大的广告,这也确定是中间者往页面插的广告内容。若是劫持技术比较低劣的话,用户甚至没法访问百度。

这里提到的中间者主要指一些网络节点,是用户数据在浏览器和百度服务器中间传输必需要通过的节点。好比 WIFI 热点,路由器,防火墙,反向代理,缓存服务器等。

在 HTTP 协议下,中间者能够随意嗅探用户搜索内容,窃取隐私甚至篡改网页。不过 HTTPS 是这些劫持行为的克星,可以彻底有效地防护。

整体来讲,HTTPS 协议提供了三个强大的功能来对抗上述的劫持行为:

1, 内容加密。浏览器到百度服务器的内容都是以加密形式传输,中间者没法直接查看原始内容。

2, 身份认证。保证用户访问的是百度服务,即便被 DNS 劫持到了第三方站点,也会提醒用户没有访问百度服务,有可能被劫持

3, 数据完整性。防止内容被第三方冒充或者篡改。

那 HTTPS 是如何作到上述三点的呢?下面从原理角度介绍一下。

1.内容加密采用非对称加密

对称内容加密强度很是高,通常破解不了。但存在一个很大的问题就是没法安全地生成和保管密钥。假如客户端软件和服务器之间每次会话都使用固定的,相同的密钥加密和解密,确定存在很大的安全隐患。若是有人从客户端端获取到了对称密钥,整个内容就不存在安全性了,并且管理海量的客户端密钥也是一件很复杂的事情。

非对称加密主要用于密钥交换(也叫密钥协商),可以很好地解决这个问题。浏览器和服务器每次新建会话时都使用非对称密钥交换算法协商出对称密钥,使用这些对称密钥完成应用数据的加解密和验证,整个会话过程当中的密钥只在内存中生成和保存,并且每一个会话的对称密钥都不相同(除非会话复用),中间者没法窃取。
非对称密钥交换很安全,但同时也是 HTTPS 性能和速度严重下降的“罪魁祸首”。想要知道 HTTPS 为何影响速度,为何消耗资源,就必定要理解非对称密钥交换的整个过程。
非对称加密相比对称加密更加安全,但也存在两个明显缺点:

1, CPU 计算资源消耗很是大。一次彻底 TLS 握手,密钥交换时的非对称解密计算量占整个握手过程的 90% 以上。而对称加密的计算量只至关于非对称加密的 0.1%,若是应用层数据也使用非对称加解密,性能开销太大,没法承受。

2, 非对称加密算法对加密内容的长度有限制,不能超过公钥长度。好比如今经常使用的公钥长度是 2048 位,意味着待加密内容不能超过 256 个字节。

因此公钥加密目前只能用来做密钥交换或者内容签名,不适合用来作应用层传输内容的加解密。

非对称密钥交换算法是整个 HTTPS 得以安全的基石,充分理解非对称密钥交换算法是理解 HTTPS 协议和功能的关键。

2.身份认证

数字证书有两个做用:

1, 身份受权。确保浏览器访问的网站是通过 CA 验证的可信任的网站。

2, 分发公钥。每一个数字证书都包含了注册者生成的公钥。在 SSL 握手时会经过 certificate 消息传输给客户端。好比前文提到的 RSA 证书公钥加密及 ECDHE 的签名都是使用的这个公钥。

申请者拿到 CA 的证书并部署在网站服务器端,那浏览器发起握手接收到证书后,如何确认这个证书就是 CA 签发的呢?怎样避免第三方伪造这个证书?

答案就是数字签名(digital signature)。数字签名是证书的防伪标签,目前使用最普遍的 SHA-RSA 数字签名的制做和验证过程以下:

1, 数字签名的签发。首先是使用哈希函数对待签名内容进行安全哈希,生成消息摘要,而后使用 CA 本身的私钥对消息摘要进行加密。

2, 数字签名的校验。使用 CA 的公钥解密签名,而后使用相同的签名函数对待签名证书内容进行签名并和服务端数字签名里的签名内容进行比较,若是相同就认为校验成功。

3.数据完整性

这部份内容比较好理解,跟平时的 md5 签名相似,只不过安全要求要高不少。openssl 如今使用的完整性校验算法有两种:MD5 或者 SHA。因为 MD5 在实际应用中存在冲突的可能性比较大,因此尽可能别采用 MD5 来验证内容一致性。SHA 也不能使用 SHA0 和 SHA1,中国山东大学的王小云教授在 2005 年就宣布破解了 SHA-1 完整版算法。

5、HTTPS协议的弊端

当使用SSL时,处理速度会变慢。HTTPS比http要慢2到100倍。

reason1:通讯慢,因为HTTPS要作服务器、客户端双方加密及解密处理,所以会消耗CPU和内存等硬件资源。除了发送HTTP请求,响应外,还必须进行SSL通讯,所以总体上处理通讯量不可避免会增长。

reason2:SSL必须进行加密处理。在服务器端和客户端须要进行加密和解密的运算处理,从结果上讲,比起HTTP会更多地消耗服务器和客户端的硬件资源,致使负载加强。

所以:请求非敏感信息则使用HTTP通讯,只有在包含我的信息等敏感数据时候,才使用HTTPS加密通讯。

相关文章
相关标签/搜索