HTTPS原理解析

原理

步骤一

  • 客户端
    • 行为操作:
      • 生成随机数randoms
      • 加密算法清单
      • 传输:randoms,加密算法清单
    • 已有数据:randoms

步骤二

  • 服务端
    • 行为操作:

      • 生成随机数randomc
      • 从客户端提交的加密算法清单选择加密算法
      • 传输:randomc,算法,ca证书(公钥,服务器地址,ca颁布机构)
    • 已有数据:randoms,randomc,ca的秘钥

步骤三

  • 客户端
    • 行为操作:
      • ca证书合法性认证:ca证书颁发,服务器地址与证书是否一致
      • pre-master(c):客户端生成随机数
      • enc-pre-master:利用ca证书的公钥加密
      • enc-key(c)协商密钥:fun(randoms+randomc+pre-master)
      • hash值(c):随机的文本信息通过hash算法进行压缩加密,获得hash值
      • 握手消息(c):hash值(c)被enc-key加密获得握手消息
      • 传输:enc-premaster(c),握手消息(c),hash(c)
    • 已有数据:randoms,randomc,公钥

步骤四

  • 服务端
    • 行为操作:
      • pre-master(s):客户端传递的enc-pre-master使用ca证书密钥解密,获得pre-master(s)
      • enc-key(s):计算服务端的协商密钥func(randoms,randomc, pre-master(s))
      • hash(s):客户端传递的握手信息(c)用enc-key(s)解密,获得hash(s)
      • hash值比较:hash(c) == hash(s)
      • 握手信息(s):截取一段hash值为hash1(s),利用enc-key(s)加密计算的握手信息(s)
      • 传递信息:hash1(s),握手信息(s)
    • 已有数据:randoms,randomc,密钥,hash(s),握手信息(c)

步骤五

  • 客户端
    • 行为操作:
      • hash1(c):服务端返回的握手信息(s)使用enc-key(c)解密,获得hash1(s)
      • hash比较:hash1(1) == hash(2),若相等表明握手成功,后面的数据传输都使用enc-key来加密数据

整理:

客户端

  • 随机生成:randomc,pre-master,
  • 加密:enc-pre-master=fun(pre-master,公钥)
  • 计算enc-key =fun(randomc,randoms,pre-master)
  • 握手信息=fun(hash值,enc-key)

服务端

  • 随机生成:randoms
  • 计算pre-master:pre-master = fun(enc-pre-master,密钥)
  • 计算enc-key = fun(random,randoms,pre-master)
  • 握手信息=fun(hash值,enc-key)

其中pre-master只有一份,且是对非对称算法加密后从客户端传递给服务端,然后通过随机生成的randomc,randoms计算得到enc-key,接着通过enc-key对hash算法处理后的文本进行加密及解密来比较,完成验证工作。

31031f564bf3d4585a26629740fe6524.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容