HTTPS

121 阅读9分钟

概述

网络安全3要素

  • 机密性
  • 完整性
  • 可靠性

HTTP存在问题

  • 数据在网络中传输使用的明文传输,不能保证数据的机密性
  • 无法实现数据传输的身份认证,无法防止数据被篡改

HTTPS

  • HTTPS (全称:Hypertext Transfer Protocol Secure),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。

  • HTTPS=HTTP+SSL

  • SSL:提供数据加密以及身份认证

  • SSL3.0后更名为TLS1.0,安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性数据完整性

    • 最新版本为TLS1.3,应用最多的版本为TLS1.2

算法

名词

  • 明文:

    • 未经过处理的数据,原始数据
    • 比如:account=admin&pwd=ad123
  • 密钥

    • 一般为一串字符串
    • 比如:slkdu09qdosikjcp9saixsa
  • 密文:

    • 将明文经过密钥配合加密算法生成的字符串(乱码),通过密文无法识别明文的数据
    • 比如:sadsad342dsadw389du980-a0x[ax]
  • 加密

    • 由明文经过密钥配合加密算法生成密文的过程;
  • 解密

    • 由密文经过密钥配合解密算法生成明文的过程

对称加密

  • 加密与解密使用同一个密钥

  • 优点:

    • 算法相对简单,适用于大量数据加密与解密,效率较高
  • 缺点:

    • 存在密钥传输泄露风险
  • 常用对称加密算法:

    • DES、3DES、AES、SM1、RC等

    image-20240313153949513

非对称加密

  • 加密与解密使用不同密钥,分别是公钥与私钥,公钥一般为公开的,私钥一般自行保存;

  • 公钥与私钥存在依存关系,一个作为加密密钥,则另外一个需要作为解密密钥;

    • 比如:使用公钥作为加密密钥,则需要私钥作为解密密钥;使用私钥作为加密密钥,则需要使用公钥作为解密密钥;
  • 优点:

    • 不存在解密密钥传输风险
  • 缺点:

    • 算法较复杂,不适合大量数据的加密与解密,效率较低
  • 常用的非对称加密算法:

    • RSA、Elgamat、ECC、SM2等

image-20240313154822461

摘要算法

  • 将明文经过摘要算法得到一个hash值,相同的明文通过摘要算法得到的hash值相同,不会受时间地点等因素影响;

  • 将明文经过摘要算法生成hash值后,不能将hash值还原为明文;

  • 摘要算法常用于密码数据处理;

  • 常用摘要算法:

    • MD5、SHA1、SHA256、SHA384、SHA512等
  1. certutil -hashfile 目标文件路径 摘要算法

image.png

image.png

使用加密算法和摘要算法案例

客户端向服务器发送数据

  • 服务器产生非对称加密的公钥:X和私钥:Y,并将公钥X发送给客户端;
  • 客户端收到公钥:X后,存储到本地,生成对称密钥:M,将对称密钥:M使用服务器公钥:X进行非对称加密生成密钥信封:N,将密钥信封发送给服务器;
  • 服务器收到密钥信封:N,使用服务器私钥:Y将密钥信封进行解密,还原为对称密钥:M,完成对称密钥协商过程;
  • 客户端将要发送给服务器的原始数据:T,经过摘要算法生成hash值:G,将原始数据T和hash值G经过对称密钥M进行对称加密生成密文:E,将密文E发送给服务器;
  • 服务器收到密文E后,使用对称密钥M解密还原为原始数据T和hash值G,将原始数据T通过相同摘要算法生成新的hash值:Z,将新的hash值Z与收到的hash值G进行比对,相同则原始数据完整,未被篡改;

image-20240313170222344

中间人攻击

image-20240313172131217

数字证书

PKI

  • 公钥基础设施,用来实现基于公钥密码体制的密钥和证书的产生、管理、存储、分发和撤销等功能。

  • CA(认证机构)是PKI的核心,负责管理PKI中所有用户(包括各种应用程序)的数字证书的生成、分发、验证和撤销。

  • RA(注册机构)接受用户的请求,负责将用户的有关申请信息存档备案,并存储在数据库中,等待审核,并将审核通过的证书请求发送给证书颁发机构。RA分担了CA的部分任务,使管理变得更方便。

  • 数字证书用于用户的身份验证。

  • 数字证书包含信息:

    • 使用者的公钥值
    • 使用者 标识信息(如名称和电子邮件地址)
    • 有效期(证书的有效时间)
    • 颁发者标识信息
    • 颁发者的数字签名

数据安全传输案例

image-20240313174621522

Alice向Bob主机发送数据

  • Alice生成公钥和私钥,将公钥发送给Bob;
  • Bob生成公钥和私钥,将公钥发送给Alice;
  • Alice将原始数据摘要算法生成hash值(信息摘要),将hash值经过自己私钥加密生成数字签名;
  • Alice将对称密钥使用Bob的公钥进行加密生成密钥信封,发送给Bob;
  • Alice将原始数据+数字签名+Alice证书通过对称密钥加密生成加密信息,发送给Bob;
  • Bob收到密钥信封后,使用自己私钥进行解密,得到对称密钥;
  • Bob收到加密信息后,使用对称密钥进行解密,得到原始数据+数字签名+Alice证书;
  • Bob检查Alice证书是否身份正确,颁发机构是的合法权威;
  • Bob将数字签名使用Alice公钥进行解密,得到旧的hash值;
  • Bob将原始数据经过相同摘要算法生成新的hash值,对比旧的hash,得出数据是否完整传输结果;
  1. Alice私钥:将摘要信息进行加密
  2. Alice公钥:摘要信息进行解密
  3. Bob私钥:对对称密钥进行解密
  4. Bob公钥:对对称密钥进行加密
  5. 对称密钥:对原始数据、数字签名、数字证书进行加密和加密

xampp证书

  • 访问xampp服务器网站资源,提示不安全(证书验证不通过)

image-20240314093330891

  • 证书配置查看

image-20240314093500888

image-20240314093809553

  • 服务器私钥

image-20240314094337132

TLS数据交互过程

image-20240314094947628

image-20240314095124786

第一阶段:客户端发送握手消息

  1. #客户端产生随机数X,发送给服务器

  2. Random: 7b9daa96962750e1429ccca58f1c6568d3244b418ee99b9abedebf0c2f51129a

  3. #客户端将支持的加密套件发送给服务器

  4. Cipher Suites (16 suites)

image.png

第二阶段:服务器响应握手消息,将服务器证书发送给客户端,并进行DH密钥协商

  • TLSv1.2 Record Layer: Handshake Protocol: Server Hello:服务器响应握手消息,从客户端发送的加密套件中,选择自己支持的安全性最高的加密套件
  1. #服务器产生随机数Y,发送给客户端

  2. Random: 2ee6d05519b6349edd691dcb43ffb486f6f44ea15f4d0d09ebe0215e42e1ec09

  3. #服务器选择自己支持的安全性最高的加密套件

  4. Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)

  5. ECDHE:密钥交互算法(协商算法)

  6. RSA:非对称算法

  7. AES_256_GCM:对称算法

  8. SHA384:摘要算法

image.png

  • LSv1.2 Record Layer: Handshake Protocol: Certificate:服务器将自己的证书信息发送给客户端
  1. 服务器将自己的证书数据加密发送给客户端,客户端收到证书数据后,验证证书是否合法,如果不合法,则给用户安全提示

image-20240314100818610

image.png

  • TLSv1.2 Record Layer: Handshake Protocol: Server Key Exchange:服务器向客户端请求进行密钥交换,并将自己的pubkey发送给客户端
  1. Pubkey: 0415c7e141eaf5491e819a4d2c780ecf14d3164a9f3727ec1b81959bcb6cad33e0fdc455…

image.png

  • TLSv1.2 Record Layer: Handshake Protocol: Server Hello Done:结束当前握手消息

第三阶段:客户端进行密钥协商完成DH过程,改变密码规范,启用加密参数

  • TLSv1.2 Record Layer: Handshake Protocol: Client Key Exchange:客户端响应服务器的密钥协商过程,将自己的pubkey发送给服务
  1. Pubkey: 044f8c5d7df2760506e50f4947c0b7b0de770e470145af99fa9f9a2ed8d2c3a31c1e19e7…

  2. 客户端随机数X,服务器随机数Y,服务器pubkey->对称密钥

  3. 客户端随机数X,服务器随机数Y,客户端pubkey->对称密钥

  4. 客户端和服务器完成对称密钥协商过程

  • TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec:客户端向服务器请求更改密码规范
  • TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message:客户端向服务器请求启用加密参数,加密握手消息

image-20240314102415938

第四阶段:服务器响应客户端改变密码规范,启用加密参数

  • TLSv1.2 Record Layer: Handshake Protocol: New Session Ticket:会话票据
  • TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec:服务器向客户端响应更改密码规范
  • TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message:服务器向客户端响应启用密码参数,加密握手消息

image.png

  1. 客户端将自己的随机数X发送给服务器,发送自己的pubkey给服务器
  2. 服务器根据自己的随机数Y、客户端随机数X以及客户端pubkey得到对称密钥
  3. 服务器将自己的随机数Y发送给客户端,发送自己的pubkey给客户端
  4. 客户端根据自己的随机数X、服务器随机数Y以及服务器pubkey得到对称密钥