分享

HTTPS工作原理:TLS HandShake 与 TLS PINNING

 和合德 2023-08-06 发布于江苏

HTTPS简介

HTTPS基于SSL/TLS协议,SSL最初由NetScape在1994年设计,经过了三个版本的更新,在1999年由IETF标准化成为TLS,其在TCP的基础上实现了一层安全的协议,包括握手、证书下发、秘钥协商等。它是互联网安全的基础,也是解决http请求被重放、篡改、传输泄露的基本手段.

Untitled.png

HTTPS的历史

  1. HTTP的起源:HTTP协议(超文本传输协议)起源于上世纪90年代初,当时的网络通信采用明文传输,存在很多安全隐患。随着互联网的快速发展,越来越多的机密信息在网络上流通,需要一种更安全的传输方式。
  2. SSL的诞生:为了解决HTTP协议的安全问题,网景公司(Netscape)在1994年发明了安全套接层协议(SSL,Secure Sockets Layer)。SSL协议通过公钥加密技术,对网络传输的数据进行加密,确保数据在传输过程中不被窃取或篡改。随后,网景公司将SSL集成到其Web服务器和浏览器中,形成了HTTPS协议。
  3. TLS的诞生:1999年,互联网工程任务组(IETF)将SSL标准化,并将其更名为传输层安全协议(TLS,Transport Layer Security)。TLS协议的发布,标志着互联网安全传输技术的正式成熟。
  4. HTTPS的普及:随着互联网安全意识的不断提高,越来越多的网站开始使用HTTPS协议。2014年,谷歌宣布将HTTPS作为其搜索排名算法的一个因素,进一步推动了HTTPS的普及。此外,Let's Encrypt等免费证书颁发机构的出现,降低了HTTPS的部署成本,使更多的网站能够采用HTTPS。
  5. HTTP/2和更高安全标准:2015年,IETF发布了HTTP/2协议,该协议在性能和安全方面都有很大改进。HTTP/2对HTTPS提供了原生支持,并鼓励开发者优先使用安全连接。此外,近年来,互联网安全标准不断提高,例如TLS 1.3的发布、弱加密算法的淘汰等,都在持续推动HTTPS的发展。

核心概念

  1. SSL/TLS:安全套接层(SSL)和传输层安全(TLS)协议是HTTPS的基础。这两个协议为网络通信提供了加密和身份验证机制。SSL是较早的安全协议,已经被淘汰;TLS是SSL的后续版本,目前广泛使用。
  2. 证书和证书颁发机构(CA):数字证书是一种用于验证实体身份的文件,包含了公钥、实体信息和颁发者签名。证书是HTTPS安全机制的重要组成部分,用于确保通信双方的真实身份。证书颁发机构(Certificate Authority,CA)是负责签发、管理和撤销证书的可信第三方机构。
  3. 公钥基础设施(PKI):公钥基础设施(Public Key Infrastructure,PKI)是用于创建、管理、分发和撤销数字证书的安全框架。它包括硬件、软件、规范和政策,以确保数字证书的有效性和可信度。
  4. 域名验证(DV)和扩展验证(EV)证书:数字证书分为多个级别,主要包括域名验证(Domain Validation,DV)证书和扩展验证(Extended Validation,EV)证书。DV证书只验证域名所有者的身份,证书颁发速度快,成本低;EV证书需要验证企业的法定身份和经营状况,颁发过程较为严格,成本较高,但提供了更高级别的信任。
  5. 握手过程:在HTTPS连接建立时,客户端和服务器需要通过握手过程来协商加密套件、交换密钥等信息。握手过程包括多个步骤,例如客户端和服务器的Hello消息、服务器证书验证、密钥交换等。

TLS 1.2 握手过程(HandShake)

Untitled 1.png

握手有两个核心

  • 验证证书
  • 协商出密钥

握手过程

  1. 客户端发送ClientHello消息,其中包含支持的密码套件和TLS版本。
  2. 服务器发送ServerHello消息,其中包含选择的密码套件和TLS版本。
  3. 服务器发送其数字证书,以便客户端可以验证其身份。
  4. 如果必要,客户端向服务器发送客户端数字证书。
  5. 客户端和服务器协商一个用于加密通信的共享密钥。
  6. 客户端发送Finished消息,以确保握手过程的完整性和正确性。
  7. 服务器发送Finished消息,以确认握手过程的完整性和正确性。
  8. 握手完成。

客户端验证数字证书

  • 验证证书链
  • 验证数字签名
  • 证书有效期:客户端会检查服务器证书的有效期,确保证书在当前时间内有效。每个数字证书都有一个开始生效日期和一个到期日期。如果证书已过期,客户端将终止与服务器的安全连接。
  • 主机名(域名)匹配:客户端会检查服务器证书中的主机名(Common Name,CN,或 Subject Alternative Name,SAN)是否与实际请求的主机名匹配。如果域名不匹配,客户端将认为证书不可信,从而终止与服务器的安全连接。
  • 证书撤销:客户端会检查服务器证书是否已被撤销。证书撤销是在证书过期之前,由于各种原因(例如私钥泄露、证书被滥用等)导致证书失效。客户端可以通过两种主要方式检查证书的撤销状态:证书撤销列表(CRL)和在线证书状态协议(OCSP)。
    • 证书撤销列表(CRL):证书颁发机构(CA)会定期发布CRL,包含所有已被撤销的证书。客户端可以下载CRL并检查服务器证书是否在列表中。
    • 在线证书状态协议(OCSP):OCSP是一种实时查询证书状态的协议。客户端可以向OCSP服务器发送查询请求,获取服务器证书的撤销状态。OCSP相比CRL具有更快的响应速度和更低的带宽消耗。
  • 加密套件和协议版本:在SSL/TLS握手过程中,客户端和服务器会协商加密套件和协议版本。客户端会验证协商的加密套件和协议版本是否足够安全,以防止使用过时或者不安全的加密算法和协议。

验证证书链

Untitled 2.png

证书链(Certificate Chain)是一种用于验证数字证书是否可信的机制。在HTTPS通信中,证书链有助于确保服务器提供的证书是由可信的证书颁发机构(CA)签发的。证书链包含了一系列从服务器证书到根证书的证书之间的关系,可以将这个过程看作是一种信任传递。

在证书链中,有以下几类证书:

  1. 服务器证书(End-entity Certificate):服务器证书是部署在网站服务器上的证书,包含了服务器的公钥、域名等信息。客户端首先会验证服务器证书的有效性。
  2. 中间证书(Intermediate Certificate):中间证书是由根证书颁发机构签发的,用于签发服务器证书。中间证书充当了根证书和服务器证书之间的信任桥梁。可能存在多个中间证书,形成一个证书链。中间证书可以降低根证书的风险,因为根证书的泄露会导致整个PKI系统的崩溃。
  3. 根证书(Root Certificate):根证书是证书颁发机构(CA)的自签名证书,存储在客户端(例如浏览器)的信任证书库中。由于根证书受到严格保护,其私钥不会用于直接签发服务器证书,而是用于签发中间证书。

在验证证书链的过程中,客户端会按照以下步骤操作:

  1. 验证服务器证书是由中间证书颁发的。
  2. 验证中间证书是由另一个中间证书或根证书颁发的。
  3. 如果存在更多的中间证书,则继续验证它们之间的关系,直到找到根证书。
  4. 验证根证书是否存在于客户端的信任证书库中。

如果整个证书链的验证过程成功完成,客户端会认为服务器证书是可信的,从而建立安全连接。

验证数字签名

Untitled 3.png

上面这张图片简要说明了证书的签发和验证过程,我们可以通过这个过程来观察数字签名的产生以及如何校验:

数字签名的产生:

  1. Signing阶段,首先撰写证书的元信息:签发人(Issuer)、地址、签发时间、过期失效等;当然,这些信息中还包含证书持有者(owner)的基本信息,例如owner的DN(DNS Name,即证书生效的域名),owner的公钥等基本信息。
  2. 通过通用的Hash算法将信息摘要提取出来;
  3. Hash摘要通过Issuer(CA)私钥进行非对称加密,生成一个签名密文;
  4. 将签名密文attach到文件证书上,使之变成一个签名过的证书。

数字签名的验证:

  1. Verification阶段,客户端获得之前签发的证书;
  2. 将其解压后分别获得“元数据”和“签名密文”;
  3. 将同样的Hash算法应用到“元数据”获取摘要;
  4. 将密文通过Issuer(CA)的公钥(非对称算法,私钥加密,公钥解密)解密获得同样的摘要值。
  5. 比对两个摘要,如果匹配,则说明这个证书是被CA验证过的合法证书,里面的公钥等信息是可信的。

HTTPS中间人攻击与TLS PINNING

在验证证书链的最后一步,客户端会验证根证书是否存在于客户端的信任证书库中,即一般来说,HTTP客户端会无条件信任系统证书,这为中间人攻击提供了可能:例如,我们可以将自己的证书安装到系统证书中(Charles 抓HTTPS的包就是利用了该原理)。

TLS pinning是一种安全机制,可以确保客户端与服务器之间的通信始终使用预期的数字证书。它通过将服务器的数字证书或公钥固定在客户端中,来防止攻击者使用伪造的数字证书来进行中间人攻击。

SSL/TLS Pinning的工作原理:

  1. 预先存储证书信息:开发者在开发客户端应用时,会将服务器证书的某些信息(如公钥或证书指纹)预先存储在应用内。这些信息可以在证书的有效期内保持不变。
  2. 验证服务器证书:当客户端与服务器建立SSL/TLS连接时,客户端会接收到服务器的证书。客户端首先会执行标准的证书验证过程,包括检查证书链、有效期、域名等。
  3. 执行Pin检查:在完成标准证书验证后,客户端会将接收到的服务器证书的相关信息(如公钥或证书指纹)与预先存储的信息进行比对。如果比对结果一致,则认为服务器身份有效;否则,拒绝建立连接。

SSL/TLS Pinning如何防止中间人攻击:

由于客户端预先存储了预期的服务器证书信息(如公钥或证书指纹),攻击者在进行中间人攻击时,即使使用伪造的证书也无法通过客户端的Pin检查。这增大了攻击者成功实施中间人攻击的难度。

参考文章

www./blog/tls-ha…

blog.csdn.net/lwwl12/arti…

zhuanlan.zhihu.com/p/30655259

blog.csdn.net/lwwl12/arti…

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多