为什么 HTTPS 是安全的?
/来自:https://segmentfault.com/a/1190000023936425/
/作者:mokeyWie/
1. HTTP 协议
在谈论 HTTPS 协议之前,先来回顾一下 HTTP 协议的概念。
1.1 HTTP 协议介绍
HTTP 协议是一种基于文本的传输协议,它位于 OSI 网络模型中的应用层。
HTTP 协议是通过客户端和服务器的请求应答来进行通讯,目前协议由之前的 RFC 2616 拆分成立六个单独的协议说明(RFC 7230、RFC 7231、RFC 7232、RFC 7233、RFC 7234、RFC 7235),通讯报文如下:
请求
POST http://www.baidu.com HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Content-Length: 7
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
wd=HTTP
响应
HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Thu, 14 Feb 2019 07:23:49 GMT
Transfer-Encoding: chunked
...
1.2 HTTP 中间人攻击
HTTP 协议使用起来确实非常的方便,但是它存在一个致命的缺点:不安全。
我们知道 HTTP 协议中的报文都是以明文的方式进行传输,不做任何加密,这样会导致什么问题呢?下面来举个例子:
小明在 JAVA 贴吧发帖,内容为我爱JAVA:
被中间人进行攻击,内容修改为我爱PHP
小明被群嘲
可以看到在 HTTP 传输过程中,中间人能看到并且修改 HTTP 通讯中所有的请求和响应内容,所以使用 HTTP 是非常的不安全的。
1.3 防止中间人攻击
这个时候可能就有人想到了,既然内容是明文那我使用对称加密的方式将报文加密这样中间人不就看不到明文了吗,于是如下改造:
双方约定加密方式
使用 AES 加密报文
2. HTTPS 协议
2.1 HTTPS 简介
2.2 CA 认证体系
上一节我们看到客户端需要对服务器返回的 SSL 证书进行校验,那么客户端是如何校验服务器 SSL 证书的安全性呢。
权威认证机构
在 CA 认证体系中,所有的证书都是由权威机构来颁发,而权威机构的 CA 证书都是已经在操作系统中内置的,我们把这些证书称之为CA根证书:
签发证书
我们的应用服务器如果想要使用 SSL 的话,需要通过权威认证机构来签发CA证书,我们将服务器生成的公钥和站点相关信息发送给CA签发机构,再由CA签发机构通过服务器发送的相关信息用CA签发机构进行加签,由此得到我们应用服务器的证书,证书会对应的生成证书内容的签名,并将该签名使用CA签发机构的私钥进行加密得到证书指纹,并且与上级证书生成关系链。
这里我们把百度的证书下载下来看看:
这里有趣的是,证书校验用的 RSA 是通过私钥加密证书签名,公钥解密来巧妙的验证证书有效性。
这样通过证书的认证体系,我们就可以避免了中间人窃取AES_KEY从而发起拦截和修改 HTTP 通讯的报文。
总结
首先先通过对 HTTP 中间人攻击的来了解到 HTTP 为什么是不安全的,然后再从安全攻防的技术演变一直到 HTTPS 的原理概括,希望能让大家对 HTTPS 有个更深刻的了解。
往期推荐: