什么是https

要了解什么是https,首先我们要知道什么是httpHTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。

HTTPS 协议:可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。

简单的说,https就是给http带了一个安全套,即·使别人拿到了信息,也不知道这个里面装的什么。

为什么需要https

 HTTP是明文传输的,也就意味着,介于发送端、接收端中间的任意节点都可以知道你们传输的内容是什么。这些节点可能是路由器、代理等。

 举个最常见的例子,用户登陆。用户输入账号,密码,采用HTTP的话,只要在代理服务器上做点手脚就可以拿到你的密码了。在发送端对密码进行加密?没用的,虽然别人不知道你原始密码是多少,但能够拿到加密后的账号密码,照样能登陆。


HTTPS是如何保障安全的

HTTPS其实就是secure http的意思啦,也就是HTTP的安全升级版。稍微了解网络基础的同学都知道,HTTP是应用层协议,位于HTTP协议之下是传输协议TCPTCP负责传输,HTTP则定义了数据如何进行包装。



HTTPS相对于HTTP有哪些不同呢?其实就是在HTTPTCP中间加多了一层加密层TLS/SSL

什么是TLS/SSL

通俗的讲,TLSSSL其实是类似的东西,SSL是个加密套件,负责对HTTP的数据进行加密。TLSSSL的升级版。现在提到HTTPS,加密套件基本指的是TLS

 原先是应用层将数据直接给到TCP进行传输,现在改成应用层将数据给到TLS/SSL,将数据加密后,再给到TCP进行传输。

大致如图所示


就是这么回事。将数据加密后再传输,而不是任由数据在复杂而又充满危险的网络上明文裸奔,在很大程度上确保了数据的安全。这样的话,即使数据被中间节点截获,坏人也看不懂。

HTTPS 原理是什么?

对安全或密码学基础有了解的同学,应该知道常见的加密手段。一般来说,加密分为对称加密、非对称加密(也叫公开密钥加密)。

对称加密

对称加密的意思就是,加密数据用的密钥,跟解密数据用的密钥是一样的。

对称加密的优点在于加密、解密效率通常比较高。缺点在于,数据发送方、数据接收方需要协商、共享同一把密钥,并确保密钥不泄露给其他人。此外,对于多个有数据交换需求的个体,两两之间需要分配并维护一把密钥,这个带来的成本基本是不可接受的。




非对称加密

举个非对称加密的例子

       • 登陆用户:小明

       • 授权网站:小羊云商

   小明是小羊云商的用户,小羊云商出于安全考虑在登陆的地方用了非对称加密。小明在登陆界面敲入账号、密码,点击“登陆”。于是,浏览器利用公钥对小明的账号密码进行了加密,并向小羊云商发送登陆请求。小羊云商的登陆授权程序通过私钥,将账号、密码解密,并验证通过。之后,将小明的个人信息(含隐私),通过私钥加密后,传输回浏览器。浏览器通过公钥解密数据,并展示给小明。

步骤一: 小明输入账号密码 > 浏览器用公钥加密 > 请求发送给小羊云商

  步骤二: 小羊云商用私钥解密,验证通过 > 获取小明社交数据,用私钥加密 > 浏览器用公钥解密数据,并展示。

 用非对称加密,就能解决数据传输安全的问题了吗?前面特意强调了一下,私钥加密的数据,公钥是可以解开的,而公钥又是加密的。也就是说,非对称加密只能保证单向数据传输的安全性。 此外,还有公钥如何分发/获取的问题。下面会对这两个问题进行进一步的探讨。

前面举了小明登陆小羊云商的例子,并提到,单纯使用公开密钥加密存在两个比较明显的问题。那就是公钥如何获取和数据传输仅单向安全问题。

问题一:公钥如何获取??

浏览器是怎么获得小羊云商的公钥的?当然,小明可以自己去网上查,小羊云商也可以将公钥贴在自己的主页。然而,对于一个动不动就成败上千万的社交网站来说,会给用户造成极大的不便利,毕竟大部分用户都不知道“公钥”是什么东西。

公钥是怎么获取的?由证书、CA(证书颁发机构)等颁发。

什么是证书?

可以暂时把它理解为网站的身份证。这个身份证里包含了很多信息,其中就包含了上面提到的公钥。

也就是说,当小明、小王、小光等用户访问小羊云商的时候,再也不用满世界的找小羊云商的公钥了。当他们访问小羊云商的时候,小羊云商就会把证书发给浏览器,告诉他们说,乖,用这个里面的公钥加密数据。

 这里有个问题,所谓的“证书”是哪来的?这就是下面要提到的CA负责的活了。

什么是CA(证书颁发机构)

证书颁发的细节这里先不展开,可以先简单理解为,网站向CA提交了申请,CA审核通过后,将证书颁发给网站,用户访问网站的时候,网站将证书给到用户。至于证书的细节,同样在后面讲到。

问题二:数据传输仅单向安全

公钥加密的数据,只有私钥能解开,于是小明的账号、密码是安全了,半路不怕被拦截。

然后有个很大的问题:私钥加密的数据,公钥也能解开。加上公钥是公开的,小明的隐私数据相当于在网上换了种方式裸奔。

上面提到,通过私钥加密的数据,可以用公钥解密还原。那么,这是不是就意味着,网站传给用户的数据是不安全的?答案是:是!

看到这里,可能你心里会有这样想:用了HTTPS,数据还是裸奔,这么不靠谱,还不如直接用HTTP来的省事。

但是,为什么业界对网站HTTPS化的呼声越来越高呢?这明显跟我们的感性认识相违背啊。这是因为HTTPS虽然用到了公开密钥加密,但同时也结合了其他手段,如对称加密,来确保授权、加密传输的效率、安全性。

概括来说,整个简化的加密通信的流程就是:

    1. 小明访问小羊云商,小羊云商将自己的证书给到小明(其实是给到浏览器,小明不会有感知)

    2. 浏览器从证书中拿到小羊云商的公钥A[CA的公钥解开数字证书]

    3. 浏览器生成一个只有自己的对称密钥B,用公钥A加密,并传给小羊云商(其实是有协商的过程,这里为了便于理解先简化)

    4.小羊云商通过私钥解密,拿到对称密钥B

    5. 浏览器、小羊云商之后的数据通信,都用密钥B进行加密

注意:对于每个访问XX的用户,生成的对称密钥B理论上来说都是不一样的。比如小明、小王、小光,可能生成的就是B1B2B3.




证书可能存在哪些问题

了解了HTTPS加密通信的流程后,对于数据裸奔的疑虑应该基本打消了。然而,细心的观众可能又有疑问了:怎么样确保证书有合法有效的?

证书非法可能有两种情况:

      1. 证书是伪造的:压根不是CA颁发的

      2. 证书被篡改过:比如将小羊云商网站的公钥给替换了

接下来针对之前提到的两种非法证书的场景,讲解下怎么识别。

篡改过的证书

假设代理通过某种途径,拿到XX的证书,然后将证书的公钥偷偷修改成自己的,然后喜滋滋的认为用户要上钩了。然而太单纯了:

        1. 检查证书,根据CA名,找到对应的CA根证书,以及CA的公钥。

        2. 用CA的公钥,对证书的数字签名进行解密,得到对应的证书摘要AA

        3. 根据证书签名使用的hash算法,计算出当前证书的摘要BB

        4. 对比AABB,发现不一致–> 判定是危险证书

完全伪造的证书

这种情况比较简单,对证书进行检查:

        1. 证书颁发的机构是伪造的:浏览器不认识,直接认为是危险证书

        2. 证书颁发的机构是确实存在的,于是根据CA名,找到对应内置的CA根证书、CA的公钥。

        3. 用CA的公钥,对伪造的证书的摘要进行解密,发现解不了。认为是危险证书