从HTTP到HTTPS,原来这么简单( 二 )


 

从HTTP到HTTPS,原来这么简单

文章插图
 
②非对称加密
针对前面所说的情况我们可以使用非对称加密对密钥进行加密处理 。同样首先 A 发送一条信息告诉服务器我要和你通讯了 , 服务器收到这条信息后先利用非对称加密(例如RSA)生成一个公钥和一个私钥 , 然后服务器将公钥发发送给 A  , A 在本地生成一个密钥并利用服务器发回的公钥进行加密 , 完成后发送给服务器 , 服务器收到后利用私钥进行解密得到对称加密的密钥 , 最后双方利用约定好的加密方式和密钥进行通信 。
从HTTP到HTTPS,原来这么简单

文章插图
 
到目前为止看起来不错密钥和信息都加密了 , 应该就没问题了吧 。真的是这样吗 , 如果真的是这样的话 HTTPS 就没有出现的必要了 。
既然密钥都加密了 , 那么中间人在拦截到第一次通信时可以拿到服务器发给客户端的加密方式和公钥 , 然后自己生成一个私钥和一个公钥 , 并将拦截到的服务器发来的公钥替换成自己生成的公钥后发送给客户端 , 这时客户端加密 AES 密钥的公钥就是中间人的了 。
客户端对 AES 密钥加密后发送给服务器 , 中间人再次拦截并利用自己的私钥解析密文得到AES 密钥 , 然后使用服务器的公钥对 AES 密钥加密并发送给服务器 。最后在客户端和服务器的整个通讯期间中间人就可以用接获到 AES 密钥对信息解密并修改 。
从HTTP到HTTPS,原来这么简单

文章插图
 
到这里一定会由同学问 , 这两种方法都无法完全避免中间人攻击 , 还有其他的办法吗?下面我们伟大的 HTTPS 就要登场了 , 它可以完全避免中间人攻击 。
二、HTTPS End1.什么是 HTTPS
HTTPS 就是 HTTP 和 TLS 的简称 , 以前的 HTTPS 使用的是 SSL  , 现在的 HTTPS 使用的是 SSL。TLS 整体上来说和非对称加密是一样的 , 主要是对 AES 密钥加密的 。
简单来说就是 A 发送一条信息给服务器告诉服务器我要和你通信 , 然后服务器返回 TLS/SSL 证数 , 客户端在收到证书后校验证书的有效性 , 如果证书有效就生成生成 AES 密钥并用证书中的公钥加密 , 然后发送给服务器 。服务器确认收到后 , 就可以利用 AES 密钥进行加密通信了 。
从HTTP到HTTPS,原来这么简单

文章插图
 
2.关于 CA 认证体系
CA 认证体系是 HTTPS 防止中间人攻击的核心 , 客户端需要对服务器发来的证书进行安全性校验 。那么客户端是怎么校验证书的安全性呢?下面我们来讲解一下 。
证书都是由权威的认证机构颁发的 , 并且这些认证机构办法的证书目前已经内置到了操作系统中(windows 是这样 , 其他的操作系统不慎了解) , 这些证书被称为 CA 根证书 。
当我们的服务器需要使用 HTTPS 的时候 , 就需要将服务器生成的公钥和网站相关信息发给权威认证机构 , 然后权威认证机构通过服务器发送的相关信息用进行加签 , 由此得到了服务器证书 , 这个证书对应的生成证书内容的签名 , 并将该这个签名使用权威认证机构的私钥进行加密得到证书指纹 , 并且和上级证书生成关系链(上级证书最后都是 CA 根证书) 。
当客户端收到服务器发来的证书后 , 首先会通过层级关系找到上级证书 , 然后利用上级证书里的公钥解密服务器证书的证书指纹 , 解密后得到签名 。
然后通过签名算法算出服务器证书的签名 , 并对比两个签名是否一样 , 一样就说明服务器发来的证书是不存在问题的 。
这里证书校验用的 RSA 是通过私钥加密证书签名 , 公钥解密来巧妙的验证证书有效性的 。通过 CA 认证体系就可以避免了中间人窃取 AES 密钥并发起拦截和修改 HTTP 通讯的报文 。
三、总结这篇文章唠唠叨叨的讲了这么多关于 HTTP 和 HTTPS 的知识 , 看似很基础其实在很多时候我们发出去或接受到的数据不准确其实就是因为中间人攻击造成的 , 因此我们在开发部署网站的时候应该尽可能的使用 HTTPS。


推荐阅读