当前位置: 首页 > 科技观察

为什么说HTTPS比HTTP安全呢

时间:2023-03-18 18:24:47 科技观察

为什么说HTTPS比HTTP安全?转载本文请联系三分钟学习前端公众号。HTTP协议HTTP(HyperTextTransferProtocol)协议是HypertextTransferProtocol的缩写,是一种用于将超文本标记语言(HTML)从WEB服务器传输到本地浏览器的传输协议。OSI网络模型中的应用层HTTP是一种基于TCP/IP通信协议传输数据的协议,传输的数据类型有HTML文件、图片文件、查询结果等。HTTP协议一般用于B/S架构。浏览器作为HTTP客户端,将所有请求通过URL发送给HTTP服务器,即WEB服务器。HTTP特性HTTP协议支持客户端/服务器模式,也是一种请求/响应模式的协议。简单快捷:客户端向服务器端请求服务时,只需要传递请求方式和路径即可。常用的请求方式有GET、HEAD、POST。灵活:HTTP允许传输任何类型的数据对象。传输类型由Content-Type标记。无连接:限制处理每个连接一个请求。服务器处理完请求并收到客户端的响应后,就断开连接,但不利于客户端与服务器保持会话连接。为了弥补这个不足,产生了两种记录http状态的技术,一种叫Cookie,一种叫Session。Stateless:无状态是指协议对事务处理没有记忆,后续处理需要之前的信息,所以必须重传。HTTP中间人攻击HTTP协议使用起来确实非常方便,但是它有一个致命的缺点:不安全。我们知道,HTTP协议中的消息是明文传输的,没有经过任何加密,这会导致中间人攻击。例如:小明JAVA贴吧,内容是我爱JAVA:被中间人攻击,内容修改为我爱PHP服务器收到的是错误信息:我爱PHP另外,请求信息也很容易被窃听和冒充截获。很容易理解,加密和解密使用的同一个密钥是对称的。只要保证密钥的安全,整个通信过程就可以说是具有保密性的。比如你想登录一个网站,只需要事先同意就可以使用对称密钥。在通信过程中,所有用密钥加密的密文都是加密的,只有你和网站才能解密。即使黑客能窃听,他看到的也只是乱码,因为明文没有密钥是无法解密的,所以达到了保密性。缺点:这种加密方式不错,问题是如何让双方都知道秘钥。该术语称为“密钥交换”。因为传输数据都是通过网络进行的,如果秘钥是通过网络传输的,一旦秘钥被截获,就没有加密的意义了。非对称加密也称为公钥加密算法。它有两个密钥,一个称为公钥,另一个称为私钥。这两个密钥不同且不对称。公钥可以向任何人公开,而私钥必须严格保密。公钥和私钥具有特殊的单向性。虽然两者都可以用来加密和解密,但是公钥加密后只能用私钥解密。反之,私钥加密后只能用公钥解密。非对称加密可以解决密钥交换问题。网站对私钥保密,公钥在互联网上任意分发。如果要登录网站,只需要用公钥加密就可以了。密文只能由私钥的持有者解密。黑客无法破解密文,因为他没有私钥。这种加密方式可以完美解决对称加密存在的问题。假设现在两端都需要使用对称加密,那么在此之前,可以使用非对称加密来交换秘钥。简单的过程如下:首先服务端公布公钥,然后客户端也知道公钥。接下来,客户端创建一个密钥,然后用公钥加密并发送给服务器。服务器收到密文后,通过私钥解密出正确的秘钥。这时候,两端就知道秘钥是什么了。那么这样做绝对安全吗?中间人想出了一个新的破解方案来对应这种加密方式。由于拿不到私钥,我把自己模拟成客户端和服务端的组合。->在中间人的过程中,中间人模拟服务器的行为,从而可以得到用户请求的明文。在中间人->服务器的过程中,中间人模拟客户端的行为,从而可以得到服务器响应的明文。这条通讯又被中间的人截获了,中间人自己伪造一对公私钥,将公钥发给用户窃取客户端生成的私钥,拿到私钥后可以轻松解密。中间人攻击的问题还没有完全解决,怎么办?接下来我们看看HTTPS是如何解决通信安全问题的。HTTPSHTTPS并不是一个新的应用层协议,实际上是HTTP和HTTPS的简称的区别:HTTP是HypertextTransferProtocol,信息以明文形式传输,而HTTPS是TLS(SSL)加密的具有安全性的传输协议HTTP和HTTPS使用完全不同的连接方式和不同的端口。前者是80,后者是443。HTTP连接非常简单,无状态;HTTPS协议由HTTP+SSL/TLS协议组成,为加密传输和身份认证而构建的网络协议比HTTPS协议更安全。SSL/TSLSSL即安全套接字层(SecureSocketsLayer),在OSI模型中处于第5层(会话层)。SSL发展到v3时,更名为TLS(TransportLayerSecurity,传输层安全),正式标准化,版本号从1.0开始算起,所以TLS1.0其实就是SSLv3.1。如今,TLS已经发展了三个版本,分别是2006年的1.1,2008年的1.2,以及去年(2018年)的1.3。使用最广泛的HTTPS1.2版本使用HTTP传输信息,但信息是通过TLS协议传输的。加密的TLS协议位于传输层之上,应用层之下。第一次TLS协议传输需要2个RTT,之后可以通过SessionResumption降为1个RTT。TLS中使用了两种加密技术,即:对称加密和非对称加密。内容传输的加密采用对称加密,非对称加密只用在证书验证阶段:服务端通过SSL证书传输公钥,客户端会验证SSL证书。证书认证体系是保障SSL安全的关键。接下来我们就CA认证体系进行讲解,看看它是如何防止中间人攻击的?CA认证体系authoritativecertificationauthority在CA认证体系中,所有的证书都是由权威机构颁发的,权威机构的CA证书已经内置在操作系统中,我们称这些证书为CA根证书。我们将服务器生成的公钥和站点相关信息发送给CA发证机构,然后CA发证机构通过CA发证机构对服务器发送的相关信息进行签名。这样会得到我们应用服务器的证书,证书会对应生成证书内容的签名,并用CA颁发机构的私钥对签名进行加密得到证书指纹,与上级生成关系链证书。这里我们下载百度的证书看看:可以看到百度受GlobalSignG2信任,同样的GlobalSignG2受GlobalSignR1信任。客户端(浏览器)进行证书验证时,会逐级向上检查,直到最终的根证书。如果没有问题,服务器证书是可以信任的。如何验证服务器证书那么客户端(浏览器)如何验证服务器证书呢?首先,它会通过层次关系找到上层证书,并使用上层证书中的公钥解密服务器的证书指纹得到签名(sign1),然后计算签名(sign2)服务器证书通过签名算法。通过比较sign1和sign2,如果相等,说明证书没有被篡改或伪造。这样,通过证书认证系统,我们就可以避免中间人攻击,发起对HTTP通信报文的拦截和修改。使用HTTPS会不会被抓包?HTTPS数据已加密。通常情况下,抓包工具代理请求后抓包的内容是加密的,无法直接查看。但是,如前所述,浏览器只会提示存在安全风险,如果用户授权,仍然可以继续访问网站并完成请求。所以,只要客户端是我们自己的终端,我们授权了,就可以组成中间人网络,抓包工具就是中间人的代理。通常使用HTTPS抓包工具生成证书,用户需要手动将证书安装到客户端,然后终端发起的所有请求都通过证书完成与抓包工具的交互,然后抓包工具将请求转发到服务器,最终将服务器返回的结果在控制台输出后返回给终端,这样就完成了整个请求的闭环。既然HTTPS不能阻止抓包,那么HTTPS有什么意义呢?HTTPS可以防止用户在他们不知情的情况下在通信链接上被监视。它不对主动信用抓包操作提供保护,因为在这种场景下,用户已经意识到了风险。通知。为防止数据包被抓包,需要采用应用层的安全防护,比如使用私有对称加密,同时做好移动端的反反编译加固,防止本地算法被泄露破解。综上所述,我们从HTTP中间人攻击了解了HTTP为什么不安全,然后从安全攻防上讲HTTPS的原理,最后讲HTTPS抓包,希望能让大家更深入的了解HTTPS。参考:极客时间:透视HTTP协议面试官:HTTPS为何安全来自:https://github.com/Advanced-Frontend/Daily-Interview-Question