一、HTTPS 和 HTTP 的对比
由上图可知:HTTPS比HTTP多了一层SSL。
1、HTTPS比HTTP主要的区别
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
2、为什么需要加密?
因为http的内容是明文传输的,明文数据会经过中间代理服务器、路由器、wifi热点、通信服务运营商等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击。所以我们才需要对信息进行加密。
二、主要的加密机制
1、对称加密
1.1 什么是对称加密:简单的说,用同一个密钥,加密和解密一段信息。
1.2 对称加密流程:
1.3 问题:对称加密安全吗?
如果通信双方都各自持有同一个密钥,且没有别人知道,这两方的通信安全当然是可以被保证的(除非密钥被破解)。
然而最大的问题就是这个密钥怎么让传输的双方知晓,同时不被别人知道。如果由服务器生成一个密钥并传输给浏览器,那在这个传输过程中密钥被别人劫持到手了怎么办?之后他就能用密钥解开双方传输的任何内容了,所以这么做当然不行。
1.4 对称加密的优点:加密速度快、加密效率高。 缺点:密钥管理的安全性很低.
2、非对称加密
2.1 什么是非对称加密:简单说就是有两把密钥,通常一把叫做公钥、一把叫私钥,用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开。
2.2 非对称加密流程:
2.3 问题:非对称加密安全吗?
非对称加密也不是绝对安全的,如果在上图的流程中,当服务器把公钥发送给客户端时,这时候被中间人拦截了,然后中间人用自己的公钥发送给客户端,客户端用中间人的公钥加密后的密文本想发送给服务器端,又被中间人拦截,并且用自己的密钥解密。然后中间人再用服务器的公钥加密发送给服务器端。这样就造成不安全了。
2.4 非对称加密的优点:安全性较高。 缺点:加密方法复杂,加密效率低,速度慢。
三、HTTPS的加密机制和流程
1、HTTPS的加密机制 :HTTPS的加密机制 = 对称加密机制+非对称加密机制。而不是单独的某一种。
2、HTTPS加密流程(非对称加密+对称加密):
2.1、某服务器拥有用于非对称加密的公钥A、私钥A’。
2.2、浏览器向服务器请求,服务器把公钥A明文给传输浏览器。
2.3、浏览器随机生成一个用于对称加密的密钥X,用公钥A加密后传给服务器。
2.4、服务器拿到后用私钥A’解密得到密钥X。
2.5、这样双方就都拥有密钥X了,且别人无法知道它。之后双方所有数据都通过对称加密的密钥X加密解密即可。
3、HTTPS使用非对称加密+对称加密的好处(为什么不单独使用非对称加密机制呢?):
好处:由于对称加密速度快,不安全,非对称加密速度慢,相对安全。所以https使用非对称加密来进行对称加密秘钥的发送。用对称加密来进行信息的传输。这样就能够利用两种加密机制各自的优点,提高传输效率。
4、问题:HTTPS加密机制(非对称加密+对称加密)安全吗?
如果在使用非对称加密发送对称加密的秘钥时,被中间人窃取了,则之后的使用对称加密发送秘文都是不安全。非对称性加密之所以不安全,是因为客户端不知道,这把公钥是不是服务器的。
备注:HTTPS加密机制之所以不安全,根本原因是客户端无法确认收到的公钥是不是服务器自己的。
四、数字证书
1、 数字证书:网站在使用HTTPS前,需要向CA机构申领一份数字证书,数字证书里含有证书持有者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明“该公钥对应该网站”。
2、如何放防止数字证书被篡改?
我们把证书原本的内容生成一份“签名”,比对证书内容和签名是否一致就能判别是否被篡改。这就是数字证书的“防伪技术”,这里的“签名”就叫数字签名。
3、数字签名流程
4、中间人有可能篡改该证书吗?
假设中间人篡改了证书的原文,由于他没有CA机构的私钥,所以无法得到此时加密后签名,无法相应地篡改签名。浏览器收到该证书后会发现原文和签名解密后的值不一致,则说明证书已被篡改,证书不可信,从而终止向服务器传输信息,防止信息泄露给中间人。
既然不可能篡改,那整个证书被掉包呢?
5、中间人有可能把证书掉包吗?
假设有另一个网站B也拿到了CA机构认证的证书,它想劫持网站A的信息。于是它成为中间人拦截到了A传给浏览器的证书,然后替换成自己的证书,传给浏览器,之后浏览器就会错误地拿到B的证书里的公钥了,这确实会导致上文“中间人攻击”那里提到的漏洞?
其实这并不会发生,因为证书里包含了网站A的信息,包括域名,浏览器把证书里的域名与自己请求的域名比对一下就知道有没有被掉包了。
6、HTTPS建立的过程