HTTPS简介

一、HTTPS的定义

HTTPS=HTTP+SSL/TLS (安全协议工作在http之下,传输层之上)
HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性,可以防监听,防伪装,防篡改。
HTTPS的常用端口号是443
HTTPS报文中的任何东西都被加密,包括所有报头和荷载

一些基本概念
(1)什么是对称加密、非对称加密?

  • 对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密
  • 非对称加密:非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
  • 公钥加密的数据只能有与之对应的私钥解密
  • 私钥加密的数据可以被任何与之对应的公钥解密
    (2)第三方公钥和私钥
  • 第三方公钥存在于客户端
  • 浏览器和操作系统都会维护一个权威的第三方机构列表(包括它们的公钥)。因为客户端接收到的证书中会写有颁发机构,客户端就根据这个颁发机构的值在本地找相应的公钥。
  • 第三方私钥值存在于第三方机构中

二、HTTPS握手过程

在这里插入图片描述
在这里插入图片描述
Google 浏览器访问https://www.baidu.com,使用wireshark抓包
在这里插入图片描述

  1. client hello
    支持的TSL协议最高版本version: TLS 1.2
    客户端支持的加密套件 cipher suites 列表
    支持的压缩算法 compression methods 列表,用于后续的信息压缩传输:这里为 0,说明不支持压缩算法
    随机数 random_C,用于后续的密钥的生成

服务器收到客户端的 hello报文以后,会回复一个TCP ACK报文
在这里插入图片描述
2. server hello 报文
在这里插入图片描述
服务器端选择的版本
随机字符串(用于生成对称秘钥)
使用的加密套件,每一个套件代表一个密钥规格。以 “TLS” 开头,接着是密钥交换算法,然后用 “WITH” 连接加密算法(会带有支持的最高密钥位数)、认证算法还有加密方式
压缩算法等。

  1. server 下发证书
    在这里插入图片描述
    证书中主要包含
    Issuer (证书的发布机构)
    Valid from , Valid to (证书的有效期)
    Public key (我们要发送给客户端的公钥)
    Subject (证书所有者)
    Signature algorithm (签名所使用的算法)
    Thumbprint, Thumbprint algorithm (指纹以及指纹算法)

证书编号=用户名和公钥等信息生成的信息摘要
数字签名=第三方私钥加密的证书编号

数字证书=数字签名+证书的其他信息

客户端收到证书以后,

  1. 通过第三方公钥对数字签名进行解密,得到证书编号和公钥等信息
  2. 通过数字证书中的签名算法,本地生成证书编号
  3. 如果客户端计算出来的证书编号与数字证书中的证书编号相同,则验证通过
  1. Server Key Exchange
    密钥交换阶段,这个步骤是可选步骤,对 Certificate 阶段的补充,只有在这几个场景存在:

    协商采用了 RSA 加密,但是服务端证书没有提供 RSA 公钥。
    协商采用了 DH(EC Diffie-Hellman) 加密,但是服务端证书没有提供 DH 参数。
    协商采用 fortezza_kea 加密,但是服务端证书没有提供参数。
    在这里插入图片描述
    前面协商了使用 EC Diffie-Hellman 算法,而且没带参数,所以这个包就是服务端带过来的用来协商 DH 密钥参数的

  2. Server Hello Done

  • 通知客户端,版本和加密套件协商结束,通知客户端已经做好进入下一个阶段的准备。
  • 通过 Wireshark 抓包发现了一个现象,就是 Server Key Exchange 和 Server Hello Done 被放到了同一个 SSL 记录协议中,这是因为 SSL 记录协议具有组合功能。客户端收到这样的包后,会处理成两个单独的协议包,这又是 SSL 记录协议的分组功能
  1. Client Key Exchange
    在这里插入图片描述
  • 通过之前客户端和服务端生成的随机数又再生成一个随机数,使用前面协商好的用 EC Diffie-Hellman 算法进行加密传输给服务端。这个值又被称为 “premaster secret“。
  • 服务端收到这个报文后,会使用自己的私钥解开这个随机数,作为预备主密钥
  • 交换完了,因为主密钥是两个端按照约定好的算法产生的,服务器如何保证收到的这个主密钥是正确的?
  1. Change Cipher Spec(Client)

客户端通知服务端,后续的报文将会被加密。

  1. Encrypted Handshake Message(Client)
  • 这里就是客户端的 Client Finished 消息。
  • 也是整个 SSL 过程中,发送给服务端的第一个加密消息。
  • 服务端接收后,服务端用同样的方式计算出已交互的握手消息的摘要,与用主密钥解密后的消息进行对比,一致的话,说明两端生成的主密钥一致,完成了密钥交换。
  1. Encrypted Handshake Message(Server)

在这里插入图片描述

服务端通知客户端,后续的报文将会被加密

这里就是服务端的 Server Finish 消息。
和上面的客户端的 Encrypted Handshake Message 一样,是服务端发出的第一条加密信息。
客户端按照协商好的主密钥解密并验证正确后,SSL 握手阶段完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值