https为何比http安全
http通讯报文件
请求:
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
响应 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 <html>...</html>
http明文
http中间人攻击

防止被中间人攻击


非对称加密 -RSA
在约定加密方式的时候由服务器生成一对公私钥,服务器将公钥返回给客户端,客户端本地生成一串秘钥(AES_KEY)用于对称加密,并通过服务器发送的公钥进行加密得到(AES_KEY_SECRET),之后返回给服务端。
服务端通过私钥将客户端发送的 AES_KEY_SECRET 进行解密得到 AEK_KEY,最后客户端和服务器通过 AEK_KEY 进行报文的加密通讯。

道高一尺魔高一丈
既然拿不到 AES_KEY,那我就把自己模拟成一个客户端和服务器端的结合体
在用户→中间人的过程中中间人模拟服务器的行为,这样可以拿到用户请求的明文,在中间人→服务器的过程中中间人模拟客户端行为,这样可以拿到服务器响应的明文,以此来进行中间人攻击:

HTTPS 解决通讯安全
SSL+HTTP(SSL 基本已经被 TLS 取代了)
SSL 协议大致就和上一节非对称加密的性质一样,握手的过程中主要也是为了交换秘钥,然后再通讯过程中使用对称加密进行通讯

关键是CA认证体系
客户端是如何校验服务器 SSL 证书的安全性呢
权威认证机构在 CA 认证体系中,所有的证书都是由权威机构来颁发,而权威机构的 CA 证书都是已经在操作系统中内置的,我们把这些证书称之为CA根证书。

将服务器生成的公钥和站点相关信息发送给 CA 签发机构,再由 CA 签发机构通过服务器发送的相关信息用 CA 签发机构进行加签。
由此得到我们应用服务器的证书,证书会对应的生成证书内容的签名,并将该签名使用 CA 签发机构的私钥进行加密得到证书指纹,并且与上级证书生成关系链。
那么客户端(浏览器)又是如何对服务器证书做校验的呢?
首先会通过层级关系找到上级证书,通过上级证书里的公钥来对服务器的证书指纹进行解密得到签名(sign1),再通过签名算法算出服务器证书的签名(sign2)。通过对比 sign1 和 sign2,如果相等就说明证书是没有被篡改也不是伪造的。

浙公网安备 33010602011771号