趣谈网络协议-应用层(HTTPS协议)

一、加密方式

1. 概述

一般加密思路:对称加密/非对称加密。对称加密使用的密钥和解密使用的密钥是相同的;非对称是不同的,分为公钥和私钥,公钥加密私钥才能解开,私钥加密公钥才能解开

2. 对称加密

加密流程:客户端和服务端约定一个密钥,发送请求时使用密钥加密;接收时使用密钥解密

问题:客户端与服务端如何约定密钥。

  • 若在网上传输密钥,可能会被黑客截取;
  • 线下传输密钥,由于客户端过多,不现实

3. 非对称加密

加密流程:

  1. 服务端将非对称密钥放在网站中,不在网络上传输,但是对应的公钥,可以在互联网上随意传播
  2. 客户端接收到服务端的公钥,可以使用公钥加密,传输数据

问题:

  • 由于公钥是公开的,攻击者可以解密服务端传输给客户端的数据
  • 解决方法:客户端需要有自己的公钥和私钥,客户端将公钥传输给服务端,在服务端向客户端传输数据时,使用客户端公钥加密

4. 数字证书

a. 非对称加密的问题

非对称加密的问题:

  • 如何将非对称加密公钥传给对方
  • 方法:放在公网地址上供下载;建立连接时,传送给对方

公钥传输的问题:如何鉴别公钥是对的,而不是攻击者伪造一个公钥,用以拦截数据

创建公/私钥指令:

openssl genrsa -out cliu8siteprivate.key 1024  // 创建私钥
openssl rsa -in cliu8siteprivate.key -pubout -out cliu8sitepublic.pem  // 创建公钥

b. 证书

证书组成:公钥、证书所有者、证书发布机构、证书有效期

生成证书的流程:

  • 发起证书请求,将申请者公钥、申请者相关信息发给权威机构认证(CA)
openssl req -key cliu8siteprivate.key -new -out cliu8sitecertificate.req
  • 权威机构会对公钥以及相关信息做HASH计算,得到HASH值,该计算过程不可逆。在把信息发送出去时,把HASH值加密,作为签名的一部分一起发出去
openssl x509 -req -in cliu8sitecertificate.req -CA cacertificate.pem -CAkey caprivate.key -out cliu8sitecertificate.pem
  •  CA用自己的私钥给请求签名的公钥签名,相当于给公钥拥有者背书

验证公钥真实性的流程:

  1. 客户端不会从服务端获取公钥,而是获取证书,证书有发布机构CA
  2. 客户端获取发CA的公钥,解密服务端证书的签名。解密成功,HASH与明文信息的HASH值一致,则说明服务端证书没有问题

CA的问题:

  • 如何验证CA 的公钥的正确性
  • 解决方法:CA的公钥由上级CA签名,层层授信背书,直到全球皆知的几个著名大 CA(root CA);Self-Signed Certificate,自签名

二、HTTPS的工作模式

HTTPS加密思路:公钥私钥主要用于传输对称加密的秘钥,而真正的双方大数据量的通信都是通过对称加密进行的

趣谈网络协议-应用层(HTTPS协议)_第1张图片

HTTPS通讯流程:

  1. 客户端发送client hello报文,报文中包含TLS 版本信息、加密方式、随机数等
  2. 服务端接收到客户端报文后,发送Server Hello报文,报文包含加密套路和随机数等信息
  3. 服务端发送Certificate报文,报文中为包含服务端公钥的CA证书
  4. 服务端发送Server Hello Done报文
  5. 客户端接收到Server hello done报文后,在CA仓库中找到对应的CA公钥(此过程可能会涉及到递归查询父CA机构),解密CA证书,计算HASH值以校验证书是否被篡改。若校验通过,证明证书可信,即可取出服务端公钥进行使用
  6. 客户端使用算法随机生成Pre-master Secret,并将其放入Client Key Exchange报文中,用证书中的公钥加密,再发送给服务器
  7. 服务端使用私钥解密客户端的Client Key Exchange报文,获取Pre-master Secret,此时,客户端和服务端都要三个随机数(客户端client hello/服务端client hello/客户端pre-master获取到的随机数),由此计算出对称密钥
  8. 客户端发送Change Cipher Spec报文,之后Encrypted Handshake Message,将已经商定好的参数等,采用协商密钥进行加密,发送给服务器用于数据与握手验证
  9. 服务端接收到客户端的报文后,发送Change Cipher Spec报文,并且也发送 Encrypted Handshake Message。
  10. 双方握手结束后,客户端和服务端即可使用对称密钥对传输的数据进行加密,后续传输流程与HTTP相似

注意:HTTPS可以使用单向认证(客户端验证服务端CA证书),也可以开启双向验证(客户端和服务器端均验证对方CA证书)

三、重放和篡改

HTTPS问题:

重放:截获报文,将报文重发N次

解决方法:Timestamp 和 Nonce 随机数联合起来,然后做一个不可逆的签名来保证。将Nonce作为唯一键(或Nonce+Timestamp),若有重复则丢弃

篡改:攻击者篡改Timestamp 和 Nonce

解决方法:使用签名算法保证Timestamp 和 Nonce不可篡改,若报文校验到被篡改,直接丢弃

你可能感兴趣的:(计算机网络,https,http,安全)