HTTPS(超文本传输安全协议)是一种用于安全通信的网络协议,它在HTTP协议的基础上通过SSL/TLS(安全套接层/传输层安全)协议来加密数据,以保护网络数据的传输安全。
TLS/SSL 基础概念
概念源自百度百科:传输层安全性协议 TLS(Transport Layer Security),及其前身安全套接层 SSL(Secure Sockets Layer)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在 1994 年推出首版网页浏览器,网景导航者时,推出 HTTPS 协议,以 SSL 进行加密,这是 SSL 的起源。IETF 将 SSL 进行标准化,1999 年公布第一版 TLS 标准文件。随后又公布RFC 5246(2008年8月)与RFC 6176(2011年3月)。在浏览器、邮箱、即时通信、VoIP、网络传真等应用程序中,广泛支持这个协议。主要的网站,如 Google、Facebook 等也以这个协议来创建安全连线,发送数据。目前已成为互联网上保密通信的工业标准
TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 Hash、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
题外:
- 握手期间所使用的的密钥交换和认证算法 (最常用的是 RSA [非对称加密]算法)
- 加密算法 (用于握手完成后的对称加密,常用的有 AES、3DES[对称加密]等)
- 信息摘要算法 (常用的有 SHA-256、SHA-1 和 MD5[散列函数] 等)
SSL/TLS 协议
HTTPS使用SSL/TLS协议来建立一个加密的通信通道。SSL/TLS协议的主要功能包括:
- 身份验证:通过证书来验证服务器的身份,确保用户连接的是正确的服务器。
- 数据加密:使用对称加密算法来加密传输的数据,保证数据的机密性。
- 数据完整性:通过消息认证码(MAC)或数字签名来确保数据在传输过程中未被篡改。
SSL 和 TLS 协议可以为通信双方提供识别和认证通道,从而保证通信的机密性和数据完整性。
TLS 协议是从Netscape SSL 3.0协议演变而来的,不过这两种协议并不兼容,SSL 已经逐渐被 TLS 取代,所以下文就以 TLS 指代安全层。 TLS 握手是启动 HTTPS 通信的过程,类似于 TCP 建立连接时的三次握手。 在 TLS 握手的过程中,通信双方交换消息以相互验证,相互确认,并确立它们所要使用的加密算法以及会话密钥 (用于对称加密的密钥)。可以说,TLS 握手是 HTTPS 通信的基础部分。
数字证书
数字证书是由可信的第三方机构(CA,证书颁发机构)颁发的,用于证明服务器的身份。证书中包含了:
- 公钥:服务器的公钥,用于加密客户端发送的数据。
- 证书持有者信息:服务器的名称和其他身份信息。
- 证书颁发机构信息:CA的名称和其他信息。
- 证书有效期:证书的有效时间范围。
握手过程
当用户通过浏览器访问一个HTTPS网站时,会触发SSL/TLS握手过程:
- 客户端发起连接:浏览器向服务器发送一个“Hello”消息,包含支持的加密套件和协议版本
- 服务器响应:服务器回复一个“Hello”消息,选择一个加密套件,并发送其数字证书
- 证书验证:浏览器验证服务器的证书是否有效,包括证书链的完整性和证书的有效期
- 密钥交换:使用DH(Diffie-Hellman)密钥交换算法或ECDH(椭圆曲线Diffie-Hellman)算法生成一个会话密钥
- 加密通信:使用会话密钥对数据进行加密,然后通过安全的通道传输
对称加密与非对称加密
非对称加密:用于在握手阶段安全地交换密钥。服务器的公钥加密数据,只有服务器的私钥才能解密
- 对称加密:用于加密实际传输的数据。使用会话密钥进行加密,速度快,适合大量数据的加密
安全特性
前向保密:即使服务器的私钥被泄露,也无法解密之前的通信数据
- 完整性校验:通过消息认证码或数字签名确保数据在传输过程中未被篡改
- 身份验证:通过证书验证服务器的身份,防止中间人攻击
https的优势
数据加密:保护用户数据不被窃听
- 身份验证:确保用户访问的是正确的服务器
- 数据完整性:确保数据在传输过程中未被篡改
https这么安全,那可以被抓包吗?
理论上,HTTPS 协议本身是安全的,不容易被“抓包”(即在传输过程中被截获和阅读)。但是,确实存在一些特定情况下可以实施抓包的方法,这些方法通常需要满足一些前提条件,并且可能伴随着安全风险
实现HTTPS抓包的几种方法:
- 中间人攻击(MITM):攻击者通过篡改网络配置,使目标流量经过其控制的服务器,从而实现对HTTPS流量的截获和可能的解密
- 安装根证书:攻击者通过让客户端安装一个由其控制的根证书,可以对通过该根证书签名的所有HTTPS流量进行解密。如果攻击者能够让客户端安装一个由他们控制的根证书,那么攻击者可以创建一个伪造的CA,并用这个伪造的CA签发一个看似合法的服务器证书。当客户端尝试连接到服务器时:
a.伪造证书:攻击者可以拦截服务器的原始证书,并替换为伪造的证书。
b.证书链验证:由于客户端信任攻击者的根证书,伪造的证书在验证过程中会被认为是有效的。
c.密钥交换:客户端使用伪造证书中的公钥加密会话密钥,并发送给攻击者(MITM代理)。
d.中间人攻击:攻击者(MITM代理)解密会话密钥,然后使用这个密钥加密自己的会话密钥发送给服务器。此时,攻击者拥有了两个会话密钥,可以解密和重新加密客户端和服务器之间的通信。
e.流量捕获:攻击者可以捕获、查看和修改客户端和服务器之间的加密通信。 - 使用代理工具:网络调试和代理工具(如Fiddler、Charles或Wireshark)可以配置为MITM代理,用于截获和分析HTTPS流量,但这通常需要用户信任并安装代理服务器的证书
- 利用漏洞:如果客户端或服务器存在安全漏洞,攻击者可能利用这些漏洞来解密或篡改HTTPS流量
- 浏览器扩展或插件:恶意的浏览器扩展或插件可以捕获并分析通过浏览器传输的HTTPS流量
- 操作系统或网络驱动级别的工具:某些操作系统或网络驱动级别的工具能够捕获网络流量,包括加密的HTTPS流量
- 合作方:如果通信的一方与攻击者合作,攻击者可能获得解密密钥
合法性和道德考量: 大多数合法的HTTPS抓包活动都是在用户知情并同意的情况下进行的,例如在开发和测试环境中。然而,未经授权的抓取和解密HTTPS流量通常被视为非法行为,因为它侵犯了通信的隐私和安全性
工具配置示例: Wireshark和Charles等工具可以用于捕获HTTPS流量,但这通常需要用户或管理员进行特定配置,例如安装根证书或设置SSLKEYLOGFILE环境变量以记录TLS会话密钥。这些操作可以帮助开发者或网络安全专家在合法和道德的范围内分析和调试HTTPS流量