https扫盲

241 阅读4分钟
  • what

    • 定义

      • Https = Http + SSL/TLS

        img

  • why

    • http问题
      • 明文传输
    • https优势
      • 数据加密,防窃听
      • 身份验证,防冒充
      • 完整性校验,防篡改
  • how

    • 数据加密:https的对称加密和非对称加密

      • 问题一:为什么同时使用对称加密和非对称加密

        • 对称加密性能高,传输数据时采用对称加密
        • 使用非对称加密,通过网络协商数据传输的密钥,确保传输安全
      • 问题二:对称加密的密钥如何产生和传输

        • tls握手阶段

          • 协商密钥sk

            • 基于非对称加密算法

              img

              • 公开密钥密码学

                • 一个公开密钥,一个私有密钥;一个用作加密,一个用作解密
                • 使用其中一个密钥加密的密文,只能使用另一个密钥解密得到明文
                • 由于加密和解密需要使用两个不同的密钥,所以称为非堆成加密
              • 流程

                • 客户端向服务端发送请求
                • 服务端返回客户端自己的公钥puk
                • 客户端生成本次对话的对称密钥sk,使用puk对sk进行加密得到sk_enc传给服务端
                • 服务端收到sk_enc后用自己的私钥prk解密得到sk
                • 接下来客户端和服务端使用sk加密后传输
            • 基于专用密钥交换算法,如dh,ecdh

            • 基于共享的secret,如psk,srp

              • 客户端和服务段预设对称加密密钥,握手阶段传递钥匙id
        • 数据通信阶段

          • 使用密钥sk对通信内容进行对称加密
          • 使用密钥sk解密数据
      • 问题三:https有几套非对称加密

        • 2套非对称加密
          • 第一套用于协商加密密钥sk(详见问题二)
            • 公私钥由服务端生成(双向认证则客户端也需要生成公私钥)
          • 第二套用于数字签名加密
            • ca机构生成公私钥,私钥由ca机构持有
    • 身份验证:https的证书

      img

      • what

        • 数字证书 = 主体信息 + 数字签名
        • 主体必要信息
          • 版本
          • 序列号
          • 签名算法
          • 颁发者
          • 有效期
          • 使用者
          • 公钥信息
        • 主体拓展信息
          • 密钥标识符
          • 证书策略
        • 数字签名
      • why

        • 中间人攻击
          • what
            • 中间人在客户端和服务端不知情的情况下,窃听甚至篡改通信信息
          • how
            • 一端向另一端发送请求,对端返回自己的公钥
            • 中间人截获了对端的公钥,替换成自己的公钥
            • 一端收到公钥,并未验证对方的身份,直接协商对称加密的密钥sk
            • 中间人拿到sk,信息泄漏
        • 防止数字证书被篡改——ca生成数字签名作为防伪标识
      • how

        • 申请证书

          img

          • 用户向ca提交自己的信息和公钥

          • 对原文做哈希,把不定长的文本映射成固定长度的字符空间

          • 使用ca的私钥对定长字符做加密

        • 验证证书

          • 使用相同的哈希算法,对除签名意外的部分做一次哈希,得到文本的哈希映射,记为h1
          • 获取ca机构的公钥对数字签名解码,得到ca机构算出的哈希映射,记为h2
          • 对比h1和h2是否相等
          • 再进行身份验证,验证域名
          • 验证通过,拿到对端的公钥
        • 获取ca机构的公钥

          • 操作系统和浏览器会预先放置一些根证书

          • 根证书

            • 没有上层机构作为数字签名
            • 证书上的公钥为ca机构颁发的公钥
          • 证书信任链

            • 证书类型:根证书,中介证书,用户证书

            • 搜索根证书

              img

              • 从用户证书开始

              • 递归寻找证书

              • 若证书的isser值等于subject值则为根证书,结束返回该证书

        • 不同后缀名的证书

          • 证书标准
            • x.509国际标准
          • 证书编码格式
            • pem
              • 以文本格式存储
              • 以begin xxx开头,end xxx结尾
              • 中间是base64编码数据
              • 用于存储公钥,私钥,证书签名等数据
              • 查看证书:openssl x509 -in xxx.pem -text -noout
              • pem转der: openssl x509 -in xxx.pem -outform der -out xxx.der
            • der
              • 以二进制存储,无法直接预览
              • 查看证书: html openssl x509 -in xxx.der -inform der -text -noout
              • der转pem: openssl x509 -in xxx.der -inform der -outform pem -out xxx.pem
          • 文件拓展名
            • 证书:存放数字证书 .crt .cer
            • 密钥:存放公钥或私钥 .key
            • 证书+密钥:同时存放证书和公钥 .pem .der .p12
            • 证书请求:证书签名请求 .csr
    • 完整性校验

      • 数据通信阶段,对原始信息做一次哈希,得到message的摘要,称为信息摘要h1
      • 对端使用协商出来的sk解密数据包,做一次相同的哈希算法得到信息摘要h2
      • 对比h1和h2,判断通信数据是否被篡改
    • https流程

      img