HTTPS 原理解析

HTTPS 原理解析

HTTPS 保证了 Web 数据传输过程中的传输安全

HTTPS:采用 对称加密 和 非对称加密 结合以及数字证书的方式来保护浏览器和服务端之间的通信安全。

不进行加密

明文传输:在客户端和服务器数据传输过程中,黑客可以获取到传输的账号密码,非常不安全

注意:

明文就相当于裸奔

对称加密

服务器每次发送真实数据前,会先生成一把密钥传输(以明文方式传输密钥容易被劫持)给客户端,服务器给客户端发送的真实数据会先用这把密钥进行加密,客户端收到加密数据后再用密钥进行解密(客户端给服务器发送数据同理)

  • 对客户端要发送的数据用秘钥进行加密
  • 以密文形式放给服务器端
  • 服务器端对密文用秘钥进行解密

注意

F(K,data)=X

F(K,X)=data

对称加密,K 只有一个,客户端和服务器端都是用 K 进行加密解密

K 可能会被劫持,因此不安全

非对称加密

非对称加密:

客户端和服务器都有两把密钥,一把公钥一把私钥(公钥加密的数据只有私钥才能解密,私钥加密的数据只有公钥才能解密),服务器在给客户端发送真实数据前,先用客户端明文传输给服务器的公钥进行加密,客户端收到后用自己的私钥进行解密,反之同理

  • 对客户端要发送的数据用公钥进行加密
  • 以密文形式放给服务器端
  • 服务器端对密文用私钥进行解密(反之同理)

注意

F(pK,data)=X

F(sK,X)=data

F(sk,data)=Y

F(pK,Y)=data

非对称加密,有两个秘钥,一个公钥一个秘钥。pK 所有人都可以拿,sK 只有服务器端有。

服务器端到客户端不安全

对称和非对称结合

服务器端有公钥和私钥

  • 客户端 向 服务器端 索要 pK
  • 服务器端 返回 pK
  • 使用公钥对相关字符串(K)进行加密 Y 之后上传给服务器端
  • 服务器端对 Y 进行解密 获取到字符串(K)
  • 该字符串(K)就是为 后续进行对称加密的 公钥(K)

注意
中间人劫持,当客户端向服务器端索要公钥时,被中间人拦截,返回假的公钥 k

对称+非对称+CA 机构 认证

CA:存放 cPK 和 cSK
服务器端:PK 和 SK

  • 客户端 向 服务器端 索要 license
  • 服务器端:F(cSK,PK)=license(CA 端运行返回给服务器端 license),返回 license
  • cPK(写死在客户端,不需要再去 CA 机构获取)
  • 然后通过客户端 F(license,cPK)=PK 获取 PK

详细步骤

访问百度为例:

  • 1.客户端-->服务器端 支持 SSL 版本,非对称算法,随机数 1
  • 2.服务器端-->客户端 定下 SSL 使用版本,对称算法,随机数 2,证书(从 CA 获取)
  • 3.客户端 证书认证
  • 4.客户端-->服务器端 随机数 3 Hash(随机数 1,随机数 2)==XXX
  • 5.服务器端 判断 XXX==Hash(随机数 1,随机数 2),查看客户端传来的 XXX 和自身 hash 计算的 XXX 是否一致,认证成功后,随机数 1,2,3 生成 K
  • 6.服务器端-->客户端 hash(第一,第二,第四步) 所有的值生成一个数值 ZZ
  • 7.客户端 也生成一个数值 ZZ hash(第一,第二,第四步) =ZZ,查看本地生成的是否和服务器端传送的一致,一致则也用随机数 1,2,3 生成一个 K,后续使用 K 进行对称加密

HTTPS 原理解析

上一篇:[CSS]垂直外边距合并的问题


下一篇:HTML5画布如何设置线的样式?