[TOC]html
HTTP和HTTPS简介
1. HTTP协议为何是不安全的算法
http协议属于明文传输协议,交互过程以及数据传输都没有进行加密,通讯双方也没有进行任何认证,通讯过程很是容易遭遇劫持、监听、篡改,严重状况下,会形成恶意的流量劫持等问题,甚至形成我的隐私泄露(好比银行卡卡号和密码泄露)等严重的安全问题。浏览器
能够把http通讯比喻成寄送信件同样,A给B寄信,信件在寄送过程当中,会通过不少的邮递员之手,他们能够拆开信读取里面的内容(由于http是明文传输的)。A的信件里面的任何内容(包括各种帐号和密码)都会被轻易窃取。除此以外,邮递员们还能够伪造或者修改信件的内容,致使B接收到的信件内容是假的。安全
好比常见的,在http通讯过程当中,“中间人”将广告连接嵌入到服务器发给用户的http报文里,致使用户界面出现不少不良连接; 或者是修改用户的请求头URL,致使用户的请求被劫持到另一个网站,用户的请求永远到不了真正的服务器。这些都会致使用户得不到正确的服务,甚至是损失惨重。服务器
2. HTTPS如何保证安全网络
咱们都知道HTTPS是安全的HTTP,那么HTTPS是如何保证通讯过程的安全的呢?网站
若是服务器给客户端的消息是密文的,只有服务器和客户端才能读懂,就能够保证数据的保密性。同时,在交换数据以前,验证一下对方的合法身份,就能够保证通讯双方的安全。(和咱们平时开发中RSA加签验签,加密解密的过程比较像)。HTTPS就是利用了相似的原理来保证通讯的安全性。下面咱们来看下具体的实现流程。加密
SSL协议
HTTPS实现安全通讯的基础是SSL协议。spa
SSL:(Secure Socket Layer,安全套接字层),为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程当中不会被截取。当前版本为3.0。它已被普遍地用于Web浏览器与服务器之间的身份认证和加密数据传输。.net
SSL协议位于TCP/IP协议与各类应用层协议之间,为数据通信提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它创建在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它创建在SSL记录协议之上,用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。
SSL协议的主要功能
- 认证用户和服务器,确保数据发送到正确的客户机和服务器;
- 加密数据以防止数据中途被窃取;
- 维护数据的完整性,确保数据在传输过程当中不被改变。
下面咱们就具体来看看SSL协议是怎么来实现上面三个功能的。
SSL协议加密数据的原理
上面提到SSL协议会把通讯的报文进行加密,那么服务器把数据加密后,客户端如何读懂这些数据呢?服务器必需要把加密的密钥(SSL中报文加密使用了对称加密技术,好比DES,3DES,AES等)告诉客户端,客户端才能利用对称密钥解开密文的内容。**可是,服务器若是将这个对称密钥以明文的方式给客户端,仍是会被中间人截获,中间人也会知道对称密钥,依然没法保证通讯的保密性。可是,若是服务器以密文的方式将对称密钥发给客户端,客户端又如何解开这个密文,获得其中的对称密钥呢?**下面请看SSL的骚操做。
用户和服务器的认证流程
- 中间人劫持
上面的加密流程彷佛很完美,也的确能将报文加密传输,可是这种方式仍是不能抵御"中间人接触"。三次握手或者客户端发起HTTP请求过程当中,客户端的请求被中间人劫持,那么中间人就能够假装成“假冒客户端”和服务器通讯:
中间人在收到服务器发送给客户端的公钥(这里是“正确的公钥”)后,并无发给客户端,而是中间人将本身的公钥(这里中间人也会有一对公钥和私钥,这里称呼为“伪造公钥”)发给客户端。以后,客户端把对称密钥用这个“伪造公钥”加密后,发送过程当中通过了中间人,中间人就能够用本身的私钥解密数据并拿到对称密钥,此时中间人再把对称密钥用“正确的公钥”加密发回给服务器。此时,客户端、中间人、服务器都拥有了同样的对称密钥,后续客户端和服务器的全部加密数据,中间人均可以经过对称密钥解密出来。
为了解决此问题,咱们引入了数字证书的概念。服务器首先生成公私钥,将公钥提供给相关机构(CA),CA将公钥放入数字证书并将数字证书颁布给服务器,此时服务器就不是简单的把公钥给客户端,而是给客户端一个数字证书,数字证书中加入了一些数字签名的机制,保证了数字证书必定是服务器给客户端的。中间人发送的伪造证书,不可以得到CA的认证,此时,客户端和服务器就知道通讯被劫持了。
- CA证书简介
数字证书就是经过数字签名实现的数字化的证书,证书颁发时会包括证书的内容和证书的签名。咱们验证证书是否被篡改的方法是:经过对证书的内容加签名,而后将得到的签名和随证书一同发布的签名作对比,若是二者一致那么证书没有被篡改。
数字证书也有不少的签发机构,不一样的签发机构签发的证书,用途也是不同的,好比iOS开发中,使用到的ipa文件签名证书,须要到苹果申请。而在Web访问中为了防止Web内容在网络中安全传输,须要用到的SSL证书则须要向几家公认的机构签发。这些签发机构统称为CA(Certificate Authority)。
数字证书的通常功能以下:
-
身份受权:确保浏览器访问的网站是通过CA验证的可信任的网站。
-
分发公钥:每一个数字证书都包含了注册者生成的公钥(验证确保是合法的,非伪造的公钥)。在SSL握手时会经过certificate消息传输给客户端。
-
验证证书合法性:客户端接收到数字证书后,会对证书合法性进行验证。只有验证经过后的证书,才可以进行后续通讯过程。
TLS
TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。 TLS 1.0是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它创建在SSL 3.0协议规范之上,是SSL 3.0的后续版本,能够理解为SSL 3.1,它是写入了 RFC 的。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。
咱们能够简单地将TLS理解为SSL的增强版本。
参考
原文出处:https://www.cnblogs.com/54chensongxia/p/11772752.html