学习笔记 HTTP权威指南 第14章 HTTP安全

192 阅读4分钟

前面讲的基础验证和摘要认证都满足不了现实需要,所以才有了HTTPS,这一章详细介绍了和HTTPS相关的知识

14.1 HTTP安全

  • HTTPS的设计要求

    • 服务器认证
    • 客户端认证
      • 防止伪造身份钓鱼攻击
    • 完整性
      • 防止数据被篡改
    • 加密
      • 防止通信被窃听
    • 效率
      • 加密/解密速度要够快
    • 普适性
      • 支持所有客户端和服务器
    • 扩展性
    • 适应性
      • 能够支持流行的加密方法
    • 可行性
  • HTTPS的作用

    • 在HTTP发往TCP之前
    • 用SSL把所有数据加密一下

14.2 密码学

  • 什么是明文

    • 加密前的报文
  • 什么是密文

    • 加密后的报文
  • 什么是密码学

    • 对报文进行加密/解密的学科
  • 密码学的历史

    • 凯撒的三位字符循环密码
      • 很容易被聪明人破解
    • 二战时的密码机
      • 比人肉更加复杂的加密机制
      • 机器可能会落入坏人之手
    • 使得了密钥的密码机
      • 不同的号盘可以改变加密方式
      • 知道了机器设计原理可能会被破解
    • 数字加密
      • 没有机械设备的速度限制
      • 可以使用越长密钥
      • 也会被超高速计算机枚举破解

14.3 对称加密

  • 常见的对称加密方法

    • DES
    • Triple-DES
    • RC2
    • RC4
  • 什么是枚举攻击

    • 暴力方式尝试每一个密钥值
  • 共享密钥的不足

    • DES加密80密钥超算下面很快就会被破解,估计128位的密钥在量子计算机下也会很快被破解
    • 通信时需要为不同的连接维护不同的密钥,上亿访问的连接无法管理

14.4 公开加密

  • 设计公开加密的前提
    • 要让坏人知道如下3个东西后,还是没办法破解
      • 公开密钥
      • 拦截的密文
      • 一条报文与之相关的密文

14.5 数字签名

  • 什么是签名

    • 用加密系统对报文进行签名
    • 说明是谁编写的报文
    • 并证明报文未被篡改
  • 签名的步骤

    • 客户端将报文提取为摘要(见摘要算法,简单的说就是MD5报文)
    • 客户端用私钥加密摘要后得到签名
    • 将签名放在报文末尾发给服务器
    • 服务器有公钥解密签名得到客户端的摘要
    • 服务器计算报文的摘要
    • 对比2边的摘要是否一样,即可判断数据是否被篡改或发送端是否有正确的私钥

14.6 数字证书

数字证书就相当于现实生活中的身份证和名片,用来证明你是谁的.名片和身份证的区别,就是权威CA和自建CA的区别

  • 数字证书的主要内容

    • 证书格式版本号
    • 证书序列号
    • 证书签名算法
    • 证书颁发机构
    • 有效期
    • 对象名称
    • 对象的公开密钥
    • 其他扩展信息
    • 以及对上面信息进行的签名
  • 通用的数字签名证书版本

    • X.509 v3证书
  • 什么时候验证服务器证书

    • SSL握手成功之后
  • 验证证书有效性的步骤

    • 日期检测
      • 过期的证书直接PASS
    • CA机构检测
      • 小CA直接PASS,除非用户自己把根证书添加到浏览器里面
    • 签名检测
      • 公钥加密证书签名发给CA验证
      • 验证通过说明证书未被篡改
    • 站点身份检测
      • 证书上的URI和请求中的URI是否一致
  • 虚拟主机存在的问题

    • 一台服务器一般只存在一个证书
    • 虚拟主机上多个域名无法共用一个证书

14.7 HTTPS

  • 什么是HTTPS

    • 在安全传输层上发送的HTTP
    • 安全层是由SSL实现的
  • HTTPS连接和HTTP连接的区别

HTTPS HTTP
会先打开443的一条TCP连接 打开80端口
客户端和服务器开始初始化SSL层,然后HTTP数据发往SSL层,再发向TCP HTTP数据直接发向TCP
断开连接时先关闭SSL再关闭TCP 直接关闭TCP
  • SSL握手过程

    • 参考图解HTTP第7章
  • SSL在代理中存在的问题

    • 因为SSL是把所有报文信息加密了,所以代理收到后看不见请求头,不知道转发给谁,就会连接失败
  • 如何解决代理中的问题

    • 客户端和代理之间先建议普通的HTTP连接
    • 代理和服务器之间建立HTTPS连接
    • 客户端再把SSL数据发给代理
    • 代理盲转发SSL数据

14.8 OpenSSL

自己构建一个SSL,跳过了.如果以后需要的话再回来看吧P346

TODO

什么是质因数和质因数分解