如需转载请评论或简信,并注明出处,未经允许不得转载
目录
前言
网上讲解https相关的文章非常多,很多文章讲的也非常详细,但是对于一些计算机网络相关的初学者来说看的有些云里雾里,然后过一段时间可能又忘了。本文将抛开很多细节概念性的东西,用最易懂的方式带你了解https的原理
信息传输的演进过程
最原始的信息传输
最原始的信息传输,非常简单,A发给B的”hello“数据包,就是像写信一样,都是通过明文进行传输的
那么问题来了,如果信息被中间人拦截到了,怎么办?
对信息进行加密
那么我们很容易想到,A和B可以约定一个规则,就像我们小时候玩游戏时候的暗号一样。如下所示,我们本想给B发送一个hello,但实际上我们对hello进行了一个逆序排列,使用olleh进行传输
这个其实就是对称密钥加密的概念,A和B使用同样的密钥S进行加密和解密。解密的过程其实就是一个逆运算的过程,比如加法和减法,乘法和除法
万维网(WWW)中的通信模型
上面我们说的是A和B两端之间进行传输,但是在万维网中,Web服务器可能要与每个客户端使用不同的密钥。既然每个密钥不一样,那么密钥是怎么确定的呢?
如何确定对称密钥
我们可以通过协商来确定密钥,即服务端下发一个密钥给客户端,客户端把这个密钥存下来,之后就可以通过这个密钥进行解密
但是,协商的过程是没有加密的,还是会被中间人拦截。那么如何加密协商的过程呢?
也就是说,如何对 对称密钥 进行加密呢?
如何对 对称密钥 进行加密
通过RSA算法生成一对密钥,公钥N和私钥M。私钥自己保存,公钥可以告知任何人,用公钥加密后可以通过私钥解密,这其实就是非对称密钥加密的概念。看到这里有人肯定会有一些疑惑,这是怎么做到的呢?
有关RSA算法我后面会通过新的章节来讲解,但是这里可以简单介绍一下RSA算法的核心理论就是
对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的
看到这里有些人可能还有另一个疑惑,既然非对称密钥加密这里厉害,那为什么还需要对称密钥加密呢?原因是非对称加密算法比对称加密算法的加密与解密速度慢很多,我们只需要进行一次非对称密钥,协商好对称密钥后,之后每次通过这个对称密钥进行加解密就可以了
目前看来似乎这个请求响应的模型已经比较完美了,但是仔细想想其实依然有问题,如果服务器端发送公钥给客户端时,被中间人调包了,怎么办?
中间人攻击
如果被中间人攻击,客户端和服务端几乎是无感知的,依然可以进行通信,但中间人可以拿到明文的信息,且发送的信息可能已经被中间人篡改了
中间人攻击(MITM攻击)是指,黑客拦截并篡改网络中的通信数据。又分为被动MITM和主动MITM,被动MITM只窃取通信数据而不修改,而主动MITM不但能窃取数据,还会篡改通信数据。最常见的中间人攻击常常发生在公共wifi或者公共路由上
现在我们已经解决了数据加密的问题,但是如何避免中间人攻击,也就是如何解决 身份验证 问题呢?如何证明“你是你”呢?
如何进行身份认证
回到现实生活中,我们想象一下,一般我们入职的时候,会要求提供学历证书,这个学历证书显然不是我们自己就可以造出来的,我们需要第三方权威机构,也就是学校给我们提供,学历证书上写了持证人、颁发机构、颁发时间、机构盖章等等
那回到我们这里的问题上,我们也需要引入一个第三方权威机构 — CA认证机构,CA(Certificate Authority)被称为证书授权中心,是数字证书发放和管理的机构
数字证书的内容包括了加密后服务器的公钥、权威机构的信息、服务器域名,还有经过CA私钥签名之后的证书内容(经过先通过Hash函数计算得到证书数字摘要,然后用权威机构私钥加密数字摘要得到数字签名),签名计算方法以及证书对应的域名
CA的公钥(根证书)是CA认证中心给自己颁发的证书,是信任链的起始点。下图展示了引入CA认证后的时序图,要保证整个过程生效,还有一点很重要,那就是根证书必须要安全地交给客户端,因此,根证书一般来说由浏览器开发商内置在浏览器或客户端的内部
https相比http优缺点
优点
- 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器
- HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性
- HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本
缺点
- 相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。此外,HTTPS 协议还会影响缓存,增加数据开销和功耗
- HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用
- 最关键的是,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制CA 根证书的情况下,中间人攻击一样可行
- 成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。在大规模用户访问应用的场景下,服务器需要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。随着云计算技术的发展,数据中心部署的服务器使用成本在规模增加后逐步下降,相对于用户访问的安全提升,其投入成本已经下降到可接受程度
总结
https就是在http的基础上增加了 SecureSocket Layer(安全套接层),使用非对称加密算法进行对称加密算法的协商过程,使用对称加密算法加密数据,并引入了数字签名技术,来核实数据发送者的身份信息