HTTPS实现原理

基本阶段

对称加密

算法f,加解密key k
加密:f(k,data)=X
解密:f(k,X)=data
过程:

  1. C f(k,data)=X ==X>>S f(k,X)=data C通过k加密data得到X并传输给S,S通过k解密X得到data
  2. S f(k,data)=X ==X>>C f(k,X)=data S通过k加密data得到X并传输给C,C通过k解密X得到data

只用对称加密,只用一个公有的key[如果每个C一个,对于S存储压力太大]:
因为hacker也有这个k,所以hacker也能解密C与S之间的加密信息

非对称加密

算法f,加解密key 公钥pk 私钥sk,私钥sk只有S有
加密:f(pk,data)=Y
解密:f(sk,Y)=data
加密:f(sk,data)=Y2
解密:f(pk,Y2)=data
过程:

  1. C==>>S S==pk>>C C向S索要公钥pk
  2. C f(pk,data)=Y ==Y>>S f(sk,Y)=data C通过pk加密data得到Y并传输给S,S通过sk解密Y得到data
  3. S f(sk,data)=Y2 ==Y2>>C f(pk,Y2)=data S通过sk加密data得到Y2并传输给C,C通过pk解密Y2得到data

C to S时,C用pk加密的Y只有S能解密,因为只有S有sk
但,S to C时,因为hacker也有pk,所以sk加密的Y2,C和hacker都能解密

阶段总结

  • 对称加密的缺点:key只有一个,大家都知道,hacker也知道
  • 非对称加密的缺点:CtoS安全,但StoC因为hacker也有pk,所以不安全

结合以上优缺点,似乎非对称+对称有戏

非对称+对称

过程:
非对称加密通信确定临时key

  1. C==>>S S==pk>>C C向S索要公钥pk
  2. C f(pk,key)=Y ==Y>>S f(sk,Y)=key C通过pk加密key得到Y并传输给S,S通过sk解密Y得到key,这个key就是临时key,因为只有S有sk,所以此时,只有C和S知道这个key

临时key作公钥进行对称加密通信

  1. C f(key,data)=X ==X>>S f(key,X)=data C通过key加密data得到X并传输给S,S通过key解密X得到data
  2. S f(key,data)=X ==X>>C f(key,X)=data S通过key加密data得到X并传输给C,C通过key解密X得到data

先用非对称加密,在CtoS时,双方确定一个临时的key作为公钥进行后续的对称加密通信,每个C得出的key都是不同的
对于hacker来说,因为没有非对称加密中的sk,他得不到这个临时的key,也就无法解密后续的对称加密通信

中间人攻击

非对称+对称看起来无懈可击,但当hacker直接在第一步CtoS时就介入,将自己伪装成S,他就能获取CtoS的通信,再将自己伪装成C与S沟通,就能获取StoC的通信
过程:
非对称加密通信确定临时key
1.
C==>>S(h) S(h)==pkh>>C C得到的是hacker的pkh
C(h)==>>S S==pk>>C(h) hacker得到了S的pk
2.
C f(pkh,key)=Y ==Y>>S(h) f(skh,Y)=key hacker得到了C发的key
C(h) f(pk,keyh)=Y ==Y>>S f(sk,Y)=keyh S得到了hacker发的keyh

此时,hacker有C的临时key,S的临时keyh,hacker使用相应的临时key和临时keyh作公钥分别与C和S作对称加密通信,通信内容相同,左右手互换
3.
C f(key,data)=X ==X>>S(h) f(key,X)=data C通过key加密data得到X并传输给hacker,hacker通过key解密X得到data
C(h) f(keyh,data)=X ==X>>S f(keyh,X)=data hacker通过keyh加密data得到X并传输给S,S通过keyh解密X得到data
4.
S(h) f(key,data)=X ==X>>C f(key,X)=data hacker通过key加密data得到X并传输给C,C通过key解密X得到data
S f(keyh,data)=X ==X>>C(h) f(keyh,X)=data S通过keyh加密data得到X并传输给hacker,hacker通过keyh解密X得到data

至此,hacker做到了同时欺骗C和S,hacker知道C和S之间的所有通信信息

分析

综合以上,非对称+对称的最大问题出在哪?

hacker从第一步C请求公钥的时候就介入了,导致C一直以为和他通信的是S,其实是hacker,也就是说,C不知道拿到手的公钥pk是好是坏

如何解决?

引入CA(证书颁发机构),理解为一个权威可信的机构
只有CA认证的公钥才是可信的公钥

CA

过程:

  1. CA把S的pk作为data,把自己的csk作为key,加密pk得到license ==>> c(csk,pk)=license
  2. CA将license卖给S【对,S要给钱的】,S将license发送给C,C的操作系统内置了大量的CA的cpk,C使用cpk对license进行解密就能拿到真正的pk ==>> c(cpk,license)=pk
  3. C保证了手上的pk是真实的,就能按部就班与S进行对称加密通信

阶段总结

csk只有CA有,cpk大家都有
hacker要想让C认为手上的pkh是真的,必须c(cpk,licenseh)=pkh=>c(csk,pkh)=licenseh,也就是hacker必须有csk才能有对应的可被cpk解密的licenseh
这也并非绝对安全,最直接的,万一hacker通过攻击CA拿到csk怎么办?

HTTPS=非对称加密+对称加密+HASH+CA=http+ssl

https连接过程

burp抓https包过程

原文地址:https://www.cnblogs.com/Rain99-/p/12795166.html