skip to content
天真笔录

HTTPS笔记

/ 7 min read

http的缺点

  1. 明文
  2. 不安全

https(s的秘密)

  1. http与https最的区别就是多了个s
  2. http over tcp/ip 变成了 http over ssl/tls
    • 下层的传输协议tcp/ip换成了ssl/tls

SSL/TLS

  1. SSL
    • 安全套接层,OSI模型处于第五层(会话层)
    • 网景公司1994年发明
    • v2/v3 两个版本
  2. TLS
    • 1999年更名TLS,标准化
    • 版本从1.0开始,TLS1.0 = SSL3.1
    • 目前广泛使用的是TLS1.2

通信安全

机密性

对称加密

  1. 特点:

    • 加密和解密使用的密钥是同一个
    • RC4 DES 3DES(不安全)
    • AES ChaCha20
  2. 加密分组模式

    • 让算法用固定长度密钥加密任意长度明文,小秘密(密钥)变成大秘密(密文)
    • 早期有ECB CBC CFB OFB,陆续发现有安全漏洞
    • 最新的分组模式被称为AEAD(Authenticate Encryption with Associated Data)加密的同时增加了认证的功能
    • GCM CCM Poly1305
  3. 对称加密的问题

    • 密钥如何安全传递
    • 密钥交换

非对称加密

  1. 特点:
    • 两个密钥: 公钥,私钥;私钥必须保密
    • 公钥加密只能用私钥解密;私钥加密只能用公钥解密
    • DH DSA RSA ECC
    • RSA: 整数分解
    • ECC: 椭圆曲线离散对数
  2. 非对称加密的问题
    • 加解密速度太慢,影响页面打开速度
    • 由于公钥是公开的,所以只能保证一端是安全的
    • 即浏览器发送给服务器的数据是安全的

混合加密

对称加密+非对称加密

  1. 特点
    • 通信开始时使用非对称加密解决密钥交换问题
    • 使用随机数产生对称加密算法使用的“公钥”
    • 公钥加密随机数
    • 服务器私钥解密,得到会话公钥
    • 后续通信使用对称加密

完整性

实现完整性的手段:摘要算法(散列函数,哈希函数)

摘要算法

  1. 特点

    • 把任意长度数据压缩成固定长度且独一无二的“摘要”字符串;数字指纹
    • MD5 SHA-1(安全强度低)
    • SHA2 (SHA224/SHA256/SHA384)
  2. 加密传输

    • 数字摘要如果明文传输,则有可能更改原文的同时把摘要也一起修改
    • 完整性必须建立在机密性之上
    • 使用会话密钥加密消息和摘要
    • 术语:哈希消息认证码(HMAC)

身份认证

网站需要确认服务器的身份(黑客可以伪造服务器身份与你通信)

解决身份认证的手段:数字签名

数字签名

  1. 原理:
    • 私钥加密原文的摘要,生成数字签名
    • 数字签名只有公钥才能解开
    • 浏览器拿到摘要再与原文进行对比验证完整性

数字证书与CA

解决公钥信任问题(防止黑客伪造公钥)

  1. CA

    • Certificate Authority(证书认证机构)
    • 给各个公钥签名生成数字证书
  2. 数字证书

    • 包含序列号、用途、颁发着、有效时间等
  3. CA如何证明自己

    • 小CA让大CA签名认证
    • 最后是Root CA,自己证明自己
    • 浏览器和操作系统内置各大CA根证书

不可否认

数字签名保证了身份认证和不可否认

https握手过程

TSL1.2

  • ECDHE: 当前主流的握手协议

第一次握手

Client Hello

  1. client random
  2. TLS版本号
  3. 加密套件列表

第二次握手

Server Hello

  1. server random
  2. 确认TSL版本号
  3. 选择一个合适的加密套件(ECDHE)
  4. 发送证书certificate(证明自己的身份)
  5. 由于选择了ECDHE算法,会在发送证书后,发送「Server Key Exchange」,这个步骤做了以下三件事
    • 5.1 选择名为named_curve的椭圆曲线
    • 5.2 生成随机数作为服务端椭圆曲线的私钥,保存到本地
    • 5.3 根据基点G和私钥计算出服务端椭圆曲线公钥,发送给客户端(server params)
  6. 为保证椭圆曲线公钥不被更改,服务端采用RSA签名算法给公钥做个签名··
  7. Server Hello Done!

第三次握手

验证证书有效性

  1. 逐级验证,确认真实性
  2. 证书公钥验证签名

Client Key Change

  1. 客户端按照密码套件要求,也生成一个椭圆曲线公钥client params
  2. 用Client Key Change发给服务器

Pre-Master

  1. Client Params + Server Params 客户端和服务端都有了
  2. ECDHE算法计算出Pre-Master(随机数)预主密钥

Master

  1. Client Random + Server Random + Pre-Master ==> Master主密钥

Change Cipher Spec

  1. 客户端发送Change Cipher Spec告诉服务器后续使用对称算法加密通信
  2. 客户端发送Encrypted Handshare Message,把之前发送的数据做个摘要,再用对称密钥加密一下,让服务端验证本次生成的密钥是否可以正常使用

第四次握手

  1. 服务器发送Change Cipher Spec和Encrypted Handshare Message,如果双发验证加密解密都没有问题,握手正式完成