HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上经过传输加密和身份认证保证了传输过程的安全性。HTTPS 在 HTTP 的基础下加入 SSL/TSL 层,HTTPS 的安全基础是 SSL/TSL,所以加密的详细内容就须要 SSL/TSL。安全
经过 SSL/TSL 层进行传输加密和身份认证,创建一个安全的信息传输通道,来保证信息传输过程当中不被窃听、假装和篡改。加密
在具体研究SSL/TSL层以前,咱们先来本身看看怎么解决 HTTP 的问题。cdn
首先,由于 HTTP 是明文传输,在整个传输过程当中,传输内容都是直接可见的,要保证这一点的安全性,那么就须要一点,传输内容只能被通讯双方看懂,其余人即便看到传输的内容,他也没法解读出真实内容,因此咱们须要对内容进行加密。blog
A 和 B 都使用一样的一个加密规则来对内容进行加密,在接收到信息后,用这个加密规则解密出真实内容,这样的加密方式就是对称加密,即加解密的密钥相同。it
过程:io
A 和 B 都知道纸条内的字母须要按照字母顺序移动3位进行解读class
A 要发送 secret message,按规则转为 pbzobq jbppxdb基础
A => B: pbzobq jbppxdblazyload
C 截获到 pbzobq jbppxdb (这是啥?)请求
B 接收到 pbzobq jbppxdb => secret message
若是说这个密钥是彻底安全保密的,除了 A 和 B,没有其余人知道这个密钥,那么这样的加密方式就是安全的。可是,A 和 B 在以前没有接触过的状况下,要怎么肯定下这个密钥?若是这个密钥也先经过 HTTP 进行传输,那么其余人就能够截获这个密钥,问题又回到了最初的状态。
既然由于传输相同的加解密钥会被人截获,那么若是只由接收方 B 来解密,发送方 A 来加密,那么其余人因为没有这个解密密钥,就没法对内容进行解密了。就好比,A 先跟 B 发送一只鸽子跟 B 要个盒子,B 发送给 A 一只带了没有锁上盒子的鸽子,A 拿到盒子后,将纸条放入盒子而且上锁,送回给 B,B 收到盒子后用钥匙打开拿到纸条。
过程:
A 给 B 飞了一只鸽子🐦
B 给 A 飞了一只鸽子🐦,鸽子带着一个盒子,盒子上有锁🔒,可是锁没有锁上
A 把纸条放到盒子中,把锁🔒锁上,用鸽子🐦飞给 B
B 收到盒子,用钥匙🔑打开盒子,拿出纸条
C 由于没有钥匙,因此无法开锁拿到盒子内的纸条,因此纸条是安全的,这种方式就是非对称加密啊,盒子为公钥,钥匙为私钥。
可是这里面有个问题,若是第二步中,这个鸽子带的盒子1被 C 换成盒子2,那么 A 拿到的盒子2并将纸条放到盒子2中,纸条也就被 C 拿到了,这时候 C 再将纸条放到盒子1 中,发回给 B,因此咱们须要保证 A 可以知道这个盒子是可靠的,没有被替换过,这就须要一个权威的人 X 来给这个盒子打上特殊标记,不被信任的人是没法标记盒子的,这样 A 就能识别这个盒子了。X 就是一个权威认证机构。
过程:
A 给 B 飞了一只鸽子🐦
B 给 A 飞了一只鸽子🐦,鸽子带着一个有标记的盒子,盒子上有锁🔒,可是锁没有锁上
A 拿出标记识别指南,对比盒子的标记,发现是 B 的盒子,把纸条放到盒子中,把锁🔒锁上,用鸽子🐦飞给 B
B 收到盒子,用钥匙🔑打开盒子,拿出纸条
如今 A 和 B 经过这种方式,就能够进行安全的通讯了,可是每次传纸条都须要进行这些步骤是很累的,并且鸽子那么小,老是带着个沉重的盒子,会很累,飞的慢。因此回到前面对称加密方式那里,是否是咱们只要保证对称加密的密钥不被 C 知道,那么通讯就是安全的?因此咱们经过上面非对称加密的方式来传输对称加密的密钥,确保这个密钥是安全的就行了,鸽子就不须要每次都带个沉重的盒子。
HTTP 存在被窃听、被假装和被篡改的可能,HTTPS 经过增长 SSL/TSL 层进行传输加密和身份认证,确保通讯通道的安全,使用非对称加密来加密对称加密使用的密钥,须要权威机构的认证来确保证书公钥的可靠性,以上就是 HTTPS 比 HTTP多出来的内容啦。