【面试高频】HTTPS加密传输过程
目录1 HTTPS是什么2 “加密”是什么3 HTTPS工作过程3.1 引入对称加密3.2 引入非对称加密3.2.1 中间人攻击3.3 引入证书3.3.1 理解数字签名3.3.2 通过证书解决中间人攻击1 HTTPS是什么前面的章节给大家介绍了http协议以及http请求/响应请求的报文格式。但是我们使用浏览器时常看到的网络请求的协议是https//:开头的如那么何为https协议呢https协议实际上是在http协议的基础上做了一些加密操作从而保障用户信息安全。因为http协议进行网络交互时是使用的明文传输此时会导致用户的数据会很容易地被网络黑客所截取造成一定的网络安全隐患。2 “加密”是什么⭕加密指将未加密的明文要传输的数据信息通过一系列的变换变成被加密后的密文。⭕解密指将加密后的密文通过一系列的变换变成原来的明文。在加密和解密的过程中往往需要一些数据来辅助加密/解密的变换过程这种数据我们把它称为密钥。3 HTTPS工作过程要保证数据传输过程的安全性我们就要对要传输的数据进行“加密”此时网络中就不会再传输明文了相反都是通过密文进行数据交互的。加密方式分为 “对称加密” 和 “非对称加密” 。3.1 引入对称加密所谓对称加密就是指客户端和服务器通过同一个密钥进行加密和解密此密钥称为对称密钥。举个栗子通信双方约定通信的过程都使用对称密钥 key8888 通过按位异或进行加密解密;假设客户端要传输的数据为1234 通过 1234 ^ key得到密文 9834服务器收到密文后通过 9834 ^ key 得到明文 1234当然真正的https进行数据加密的过程肯定没有按位异或这么简单这里只是举例子让大家更清楚的知道对称加密的特点。于是我们可以很清晰地得到客户端与服务器的通信过程如下引入对称加密之后网络攻击者就不能直接获取明文对用户的信息进行窃取了。❗问题1服务器通常是在同一时间针对多个客户端提供服务的但不同的客户端与服务器进行交互的对称密钥必定是不能相同的如果每个客户端密钥都相同那网络黑客直接就能获取密钥了。就好比如果每个人的银行卡密码都相同那密码也就失去了它的意义。于是服务器就需要维护与每个客户端之间的密钥映射较为繁琐和麻烦如下图❗问题2要使用对称加密前提是客户端要将生成好的对称密钥通过网络传输转发给服务器传输密钥的过程必定是要加密的就需要设定 “ 密钥的密钥 ” 以此类推不断循环那就是 “ 先有蛋还是先有鸡 ” 的问题了。于是我们引入非对称加密......3.2 引入非对称加密所谓非对称加密就是服务器提前生成两个密钥一个是私钥一个是公钥。所有客户端包括黑客都可以拿到公钥客户端要提前生成对称密钥通过公钥加密而服务器通过私钥解密。而后续客户端与服务器的交互就通过对称加密解密就可以安全可靠地传输数据了。此时网络黑客由于拿不到私钥就无法窃取对称密钥自然也就无法窃取用户信息了。同时提高了一定的网络安全性。此时客户端与服务器的交互过程如下上图过程可以防止网络黑客直接地窃取对称密钥但是狡猾的网络黑客会通过一种 “中间人攻击” 的方式在客户端与服务器都不知情的情况下间接地获取到对称密钥。3.2.1 中间人攻击所谓中间人攻击就是交互双方之间的中间人通过一系列操作达到到自己想要的目的。不少谍战片中都有相关的 “ 中间人 ” 的操作。对于网络通信的过程中间人攻击的具体过程如下服务器生成的 公钥S 私钥S中间人生成的 公钥M 私钥M服务器发送给客户端公钥S但中间人转发给客户端的公钥不是S而是M。客户端收到M后将对称密钥通过M加密发送给中间人中间人通过自己的私钥M解密后得到对称密钥。再将对称密钥通过服务器公钥S加密发送给服务器。服务器通过S解密后也得到了对称密钥。问题就出现了客户端如何才能判断收到的公钥是服务器发来的呢如果不判断就直接传输对称密钥会造成严重的网络安全那此时我们就需要引入证书来协助客户端识别收到的公钥是否被篡改......3.3 引入证书引入证书的目的是为了辅助客户端识别收到的公钥的合法性。是服务器在使用HTTPS前提前向CA机构申请一份数字证书数字证书中包含申请人信息签发机构、有效时间、域名、申请人等和数字签名。⚠️注意申请证书的时候需要在特定的平台生成同时会生成一对CA机构的公钥和私钥这对密钥就是用来在网络通信中进行明文加密和数字签名的。3.3.1 理解数字签名当服务端申请CA证书的时候CA机构会对该服务端进行审核并专门为该网站形成数字签名过程如下CA机构拥有自己的公钥A私钥ACA机构对证书中的申请人信息明文数据进行hash形成数据摘要CA机构通过私钥A 对数据摘要进行加密生成数字签名。3.3.2 通过证书解决中间人攻击✅在客户端和服务器一建立连接之后服务器就会给客户端返回一个证书此证书包含了服务器的公钥也包含了网站的相关信息。✅客户端拿到证书后首先判定证书的有效时间是否合法。✅判定发布机构是否受信任操作系统内置了已受信任的证书发布机构✅验证数字签名的合法性通过系统得到发布该证书的官方机构的公钥A通过公钥A对数字签名进行解密得到一个哈希值 hash1。再计算整个证书的哈希值得到 hash2比对hash1与hash2如果相同则证明证书没有被篡改反之则被篡改了。3.3.3 相关面试题的解答1.为什么要形成数字签名答数字签名的目的是为了让客户端可以验证服务器发来的公钥的合法性从而避免中间人攻击窃取对称密钥。2. 为什么不能直接加密而要先计算哈希值再加密答计算哈希值是为了缩小签名密文的长度加快数字签名的验证以及签名计算的速度。3. 中间人有没有可能通过篡改证书获取对称密钥答中间人篡改证书由于中间人没有CA机构的私钥无法对篡改后的计算哈希值进行加密。如果强行篡改就没办法生成证书信息与数字签名匹配的证书后续客户端通过验证还是会发现证书不合法。4. 中间人可以直接掉包证书嘛答中间人想掉包证书由于中间人没有CA机构的私钥就需要提前向CA机构申请证书。然后用自己申请的证书进行掉包这个确实能做到证书的整体掉包但是别忘记证书明文中包含了域名等服务端认证信息如果整 体掉包客户端依旧能够识别出来。永远记住中间没人有CA私钥所以对任何证书都无法进行合法修改包括自己的。