【腾许Bugly干货分享】“HTTPS”安全在哪里?

背景

最近基于兴趣学学习了下 HTTPS 相关的知识,在此记录下学习心得。vue

在上网获取信息的过程当中,咱们接触最多的信息加密传输方式也莫过于 HTTPS 了。每当访问一个站点,浏览器的地址栏中出现绿色图标时,意味着该站点支持 HTTPS 信息传输方式。咱们知道 HTTPS 是咱们常见的 HTTP 协议与某个加密协议的混合体,也就是 HTTP+S。这个 S 能够是 TLS(安全传输层协议)、也能够是 SSL(安全套接层),不过我更承认另外一个抽象归纳的说法,HTTP+Security。不过要谈论 HTTPS 为什么安全,还得从 HTTP 为什么不安全提及。算法

假设你如今正坐在教室里上课,如今你很是想和走道旁的迷人的 TA 说一些话,通常这个时候你会用“传纸条”的方式来交流。而这个方式和 TCP/IP 协议基本的工做模式十分相像:浏览器

  1. 经过小动做引发对方注意;
  2. 对方以多种可能的方式(注视、肢体语言等)回应于你;
  3. 你确认对方感知到你后,将纸条传给对方;
  4. 对方阅读纸条;
  5. 对方给予你阅读后的反应;安全

    怎么样,这个流程是否是很熟悉?markdown

    若是你要传递纸条的 TA 距离你很远怎么办?HTTP 协议就是指你在纸条上写明你要传给的 TA 是谁,或者 TA 的座位在哪,接着只须要途径的同窗拿到纸条后根据纸条上的指示依次将纸条传过去就 OK 了。app

    这个时候问题来了:途径的同窗彻底能够观看并知道你在纸条上写了什么。学习

    这就是 HTTP 传输所面临的问题之一:中间人攻击,指消息传递的过程当中,处在传递路径上的攻击者能够嗅探或者窃听传输数据的内容。优化

    加密

    HTTPS 针对这个问题,采用了“加密”的方式来解决。最著名原始的加密方法就是对称加密算法了,就是双方约定一个暗号,用什么字母替换什么字母之类的。如今通常采用一种叫 AES(高级加密算法)的对称算法。网站

    对称加密算法既指加密和解密须要使用的密钥 key 是同样的。ui

    AES 在数学上保证了,只要你使用的 key 足够长,破解几乎是不可能的(除非光子计算机造出来了)

    咱们先假设在没有密钥 key 的状况下,密文是没法被破解的,而后再回到这个教室。你将用 AES 加密后的内容噌噌噌地写在了纸条上,正要传出去的时候你忽然想到,TA 没有 key 怎么解密内容呀,或者说,应该怎么把 key 给TA?

    若是把 key 也写在纸条上,那么中间人照样能够破解窃听纸条内容。也许在现实环境中你有其余办法能够把 key 经过某种安全的渠道送到 TA 的手里,可是互联网上的实现难度就比较大了,毕竟无论怎样,数据都要通过那些路由。

    因而聪明的人类发明了另外一种加密算法——非对称加密算法。这种加密算法会生成两个密钥(key1 和 key2)。凡是 key1 加密的数据,key1 自身不能解密,须要 key2 才能解密;凡事 key2 加密的数据,key2 自身不能解密,只有 key1 才能解密。

    目前这种算法有不少中,最经常使用的是 RSA。其基于的数学原理是:

    两个大素数的乘积很容易算,可是用这个乘积去算出是哪两个素数相乘就很复杂了。好在以目前的技术,分解大数的素因确实比较困难,尤为是当这个大数足够大的时候(一般使用2的10次方个二进制位那么大),就算是超级计算机,解密也须要很是长的时间。

    如今就把这种非对称加密的方法应用在咱们教室传纸条的场景里。

  • 你在写纸条内容以前先用 RSA 技术生成了一对密钥 k1 和 k2。
  • 你把 k1 用明文传了出去,路经也许有人会截取,可是没有用,k1 加密的数据须要 k2 才能够破解,而 k2 在你本身手中。
  • k1 传到了目的人,目的人会去准备一个接下来准备用于对称加密(AES)的传输密钥 key,而后用收到的 k1 把 key 加密,传给你。
  • 你用手上的 k2 解出 key 后,全教室只有你和你的目的人拥有这个对称加密的 key,大家俩就能够尽情聊天不怕窃听啦~

    这里也许你会有问题,为何不直接用非对称加密来加密信息,而是加密 AES 的 key 呢?
    由于非对称加密和解密的平均消耗时间比较长,为了节省时间提升效率,咱们一般只是用它来交换密钥,而非直接传输数据。

    然而使用非对称加密真的能够防范中间人攻击吗?
    虽然看上去很安全,可是实际上却挡不住可恶的中间人攻击。

    假设你是 A,你的目的地是 B,如今要途径一个恶意同窗M。

    中间人的恶意之处在于它会假装成你的目标。

  • 当你要和 B 完成第一次密钥交换的时候,M 把纸条扣了下来,伪装本身是B并伪造了一个 key,而后用你发来的 k1 加密了 key 发还给你。

  • 你觉得你和 B 完成了密钥交换,实际上你是和 M 完成了密钥交换。
  • 同事 M 和 B 完成一次密钥交换,让 B 觉得和 A 你完成了密钥交换。
  • 如今总体的加密流程变成了A(加密连接1)->M(明文)->B(加密连接2)的状况了,这时候 M 依然能够知道A和B传输的所有消息。

    这个时候就是体现 HTTPS 和传纸条的区别了。在教室里,你是和一位与你身份几乎对等的的对象来通讯;而在访问网站时,对方每每是一个比较大(或者知名)的服务者,他们有充沛的资源,或许他们能够向你证实他们的合法性。

    此时咱们须要引入一个很是权威的第三方,一个专门用来认证网站合法性的组织,能够叫作 CA(Certificate Authority)。各个网站服务商能够向 CA 申请证书,使得他们在创建安全链接时能够带上 CA 的签名。而 CA 得安全性是由操做系统或者浏览器来认证的。

    你的 Windows、Mac、Linux、Chrome、Safari 等会在安装的时候带上一个他们认为安全的 CA 证书列表,只有和你创建安全链接的网站带有这些CA的签名,操做系统和浏览器才会认为这个连接是安全的,不然就有可能遭到中间人攻击。

    一旦某个 CA 颁发的证书被用于的非法途径,那么这个 CA 以前颁发过的全部证书都将被视为不安全的,这让全部 CA 在颁发证书时都十分当心,因此 CA 证书在一般状况下是值得信任的。

    总结

    使 HTTP 后面增长一个S(Security)的技术,正是 对称加密 + 非对称加密 + CA 认证 这三种技术的混合体。固然这个主要是 HTTPS 的基本原理,真正实际中的 HTTPS 的协议是比以上的描述更为复杂一些的,而且其中任何一步稍有闪失,整个流程都将再也不安全。

    这也是为何 HTTPS 协议从 SSL 1.0升级到 SSL 3.0,再被 TLS 1.0 如今被 TLS 1.3取代,其背后都是一个个细节上的优化,以防有任何闪失。

    TLS 协议相比 SSL 协议增长了传输层的安全保证。

相关文章
相关标签/搜索