一张图告诉你,为什么HTTPS比HTTP更安全?


点击进入“PHP开源社区”
免费获取进阶面试、文档、视频资源
为什么说 HTTPS 是安全的呢?下面先看看详细的 HTTPS 原理 , 看完你就理解了 。
HTTP 协议
在谈论 HTTPS 协议之前 , 先来回顾一下 HTTP 协议的概念 。
HTTP 协议介绍
HTTP 协议是一种基于文本的传输协议 , 它位于 OSI 网络模型中的应用层 。
一张图告诉你,为什么HTTPS比HTTP更安全?
本文插图
HTTP 协议是通过客户端和服务器的请求应答来进行通讯 , 目前协议由之前的 RFC 2616 拆分成立六个单独的协议说明(RFC 7230、RFC 7231、RFC 7232、RFC 7233、RFC 7234、RFC 7235) , 通讯报文如下:
请求
响应
HTTP 中间人攻击
HTTP 协议使用起来确实非常的方便 , 但是它存在一个致命的缺点:不安全 。
我们知道 HTTP 协议中的报文都是以明文的方式进行传输 , 不做任何加密 , 这样会导致什么问题呢?下面来举个例子:
小明在 JAVA 贴吧发帖 , 内容为我爱JAVA:
一张图告诉你,为什么HTTPS比HTTP更安全?
本文插图
被中间人进行攻击 , 内容修改为我爱PHP
一张图告诉你,为什么HTTPS比HTTP更安全?
本文插图
小明被群嘲
可以看到在 HTTP 传输过程中 , 中间人能看到并且修改 HTTP 通讯中所有的请求和响应内容 , 所以使用 HTTP 是非常的不安全的 。
防止中间人攻击
这个时候可能就有人想到了 , 既然内容是明文那我使用对称加密的方式将报文加密这样中间人不就看不到明文了吗 , 于是如下改造:
双方约定加密方式
一张图告诉你,为什么HTTPS比HTTP更安全?
本文插图
使用 AES 加密报文
一张图告诉你,为什么HTTPS比HTTP更安全?
本文插图
这样看似中间人获取不到明文信息了 , 但其实在通讯过程中还是会以明文的方式暴露加密方式和秘钥 , 如果第一次通信被拦截到了 , 那么秘钥就会泄露给中间人 , 中间人仍然可以解密后续的通信:
在约定加密方式的时候由服务器生成一对公私钥 , 服务器将公钥返回给客户端 , 客户端本地生成一串秘钥(AES_KEY)用于对称加密 , 并通过服务器发送的公钥进行加密得到(AES_KEY_SECRET) , 之后返回给服务端 , 服务端通过私钥将客户端发送的AES_KEY_SECRET进行解密得到AEK_KEY,最后客户端和服务器通过AEK_KEY进行报文的加密通讯 , 改造如下:
一张图告诉你,为什么HTTPS比HTTP更安全?
本文插图
可以看到这种情况下中间人是窃取不到用于AES加密的秘钥 , 所以对于后续的通讯是肯定无法进行解密了 , 那么这样做就是绝对安全了吗?