HTTPS认证过程详解:从SSL/TLS到证书链验证
引言
随着互联网安全意识的提高,HTTPS协议已成为现代网络通信的标准。HTTPS通过SSL/TLS协议为HTTP提供加密和认证,确保数据传输的安全性。本报告将深入剖析HTTPS认证过程,从基础概念到具体实现,全面解析这一保障网络通信安全的关键机制。
SSL/TLS基础概念
SSL/TLS的发展历程
SSL(Secure Sockets Layer,安全套接字层)最早由Netscape公司在1994年设计,但并未发布1.0版本。随后发布的SSL 2.0和3.0存在安全漏洞,已经被废弃。TLS(Transport Layer Security,传输层安全协议)是SSL的后继者,TLS 1.0于1999年发布,随后TLS 1.1(2006年)和TLS 1.2(2008年)相继推出,进一步增强了安全性和性能[2]。目前,TLS 1.2是最广泛使用的版本,而TLS 1.3于2018年推出,提供了更高的安全性和性能。
SSL/TLS协议概述
SSL/TLS协议位于应用层和传输层之间,为数据通信提供安全支持。当使用SSL/TLS时,应用层数据需要经过SSL/TLS层的加密,然后再发送到传输层[13]。TLS协议由两个重要协议组成:TLS记录协议和TLS握手协议。TLS协议的主要功能包括:
-
数据加密:确保通信内容不被窃听 -
数据完整性:防止数据在传输过程中被篡改 -
身份验证:验证通信双方的身份
HTTPS与SSL/TLS的关系
HTTPS实际上是HTTP加上SSL/TLS加密模块的组合。当网站受到SSL/TLS证书保护时,URL中会显示HTTPS。用户可以通过点击浏览器地址栏中的挂锁标记来查看证书的详细信息,包括颁发机构和网站所有者等[6]。TLS连接是通过TLS握手流程启动的。当用户导航到一个使用TLS的网站时,用户设备(客户端)和Web服务器之间开始TLS握手。在TLS过程中,客户端和服务器交换消息以相互验证,相互确认,并确立它们所要使用的加密算法和密钥[12]。
SSL/TLS在传输层的工作原理
基本工作方式
TLS/SSL的基本工作方式是,客户端使用非对称加密与服务器进行通信,实现身份验证并协商对称加密使用的密钥,然后对称加密算法采用协商好的密钥对后续传输的数据进行加密[11]。
握手过程
TLS握手是启动HTTPS通信的过程,类似于TCP建立连接时的三次握手。在TLS握手的过程中,通信双方交换消息以相互验证,相互确认,并确立它们所要使用的加密算法和密钥[24]。TLS握手过程通常包括以下几个步骤:
- Client Hello
客户端向服务器发送Client Hello消息,包含客户端支持的最高TLS协议版本、随机数random_C、加密套件候选列表、压缩算法候选列表等信息。 - Server Hello
服务器向客户端发送Server Hello消息,包含服务器选择的版本、随机数random_S、选择的加密套件、选择的压缩算法等。 - Certificate
服务器向客户端发送公钥证书。 - Server Key Exchange
服务器发送密钥交换的额外数据,例如在使用ECDHE非对称密钥协商算法时,服务器发送其使用的DH参数。 - Server Hello Done
服务器通知客户端,所有握手消息已经发送完毕。 - 证书合法性校验
客户端对服务器下发的公钥证书进行合法性校验,包括证书链的可信性、证书是否吊销、证书有效期、证书域名是否与当前访问域名匹配等。 - 协商加密密钥
客户端产生随机数字Pre-master,计算生成会话密钥enc_key{ enc_key=Fuc(random_C, random_S, Pre-Master) }。将Pre-master与enc_key用证书公钥加密发送给服务器。 - Change Cipher Spec Protocol
客户端通知服务器后续的通信都采用协商的密钥enc_key和加密算法进行加密通信。 - Encrypted Handshake Message
客户端将之前所有的握手数据生成摘要,然后用密钥enc_key加密,发送给服务器。 - Application Data
双方已安全地协商出了同一份密钥enc_key,所有的应用层数据都会用这个密钥加密后再通过TCP进行可靠传输[26]。
证书系统详解
证书颁发机构(CA)
证书颁发机构(CA)是PKI的"核心",即数字证书的申请及签发机关。CA必须具备权威性的特征,负责管理PKI结构下的所有用户(包括各种应用程序)的证书,验证用户的身份,并在网上验证用户的身份[40]。CA证书是用来给客户证书签名的授信证书,它由CA颁发,是整个TLS握手信任的锚点。CA证书又被称为数字证书,证书主要包含证书拥有者的身份信息,CA机构的信息等[18]。
证书链结构
证书链是从终端用户证书到其后跟着的一系列CA证书,而通常最后一个(即根证书)是自签名证书。假设我们当前的证书链包含叶子证书、中间证书和根证书[34]。证书链的结构通常如下:
-
根证书(CA) 由证书颁发机构创建的自签名证书,是证书链的信任基础。 - 中间证书
由根CA签名的证书,用于实际颁发服务器证书。 -
服务器证书(叶子证书) 颁发给实际服务器的证书,包含服务器的公钥和身份信息。
证书验证过程
证书验证是一个多步骤的过程,涉及证书链验证、域名匹配、吊销检查等多个环节[36]。
- 证书链验证
检查是用证书链中的下一个证书的公钥来验证当前证书的签名,一直检查到证书链的尾端(根证书),如果所有验证都成功通过,那这个证书就是可信的。 - 证书域名验证
核查证书域名是否与当前的访问域名匹配。例如,我们请求的域名www.baidu.com是否与证书文件中DNS标签下所列的域名相匹配。 - 证书吊销检查
检查证书是否被吊销。CA机构能够签发证书,同样也存在机制宣布以往签发的证书无效。 - 证书有效期检查
检查证书的有效期是否已经过期。
证书吊销机制
证书吊销机制用于管理那些因安全漏洞、密钥泄露或管理变更等原因需要提前失效的证书。主要有两种方式:CRL(证书吊销列表)和OCSP(在线证书状态协议)。
CRL(证书吊销列表)
证书吊销列表(CRLs) 实质上是列出吊销证书序列号的文本文件。这些在CRL中的证书不再会受到信任[43]。CRL由CA创建并定期更新,客户端需要下载CRL并检查证书是否在吊销列表中。CRL的缺点是:
-
需要定期下载更新 -
文件可能较大 -
无法实时反映吊销状态
OCSP(在线证书状态协议)
OCSP是一种实时查询证书状态的协议。请求者发送证书的信息并请求查询,服务器返回正常、吊销或未知中的任何一个状态[41]。OCSP的优点是:
-
可以立即获取吊销信息 -
响应包内容短 -
更高效OCSP Stapling技术允许服务器端提前查询OCSP状态并缓存,减少客户端的额外请求开销。
HTTPS认证过程详解
域名解析过程
在建立HTTPS连接之前,首先需要将域名解析为IP地址。这个过程称为DNS解析,是建立连接的第一步。DNS解析过程通常包括以下步骤:
-
用户输入域名 -
浏览器检查本地缓存 -
检查系统Hosts文件 -
向本地DNS服务器发起查询 -
本地DNS服务器进行迭代查询: -
根域名服务器 -
顶级域名服务器 -
权威域名服务器 -
获取IP地址并建立连接[51]
TLS握手过程
TLS握手是启动HTTPS通信的过程,类似于TCP建立连接时的三次握手。在TLS握手的过程中,通信双方交换消息以相互验证,相互确认,并确立它们所要使用的加密算法和密钥[24]。以下是TLS 1.2握手过程的详细步骤,以ECDHE密钥交换算法为例:
- Client Hello
-
版本:通常为TLS 1.2 -
Random:客户端随机数(随机数1) -
Session ID:可选,用于会话恢复 -
Cipher Suites:客户端支持的加密套件列表 -
Compression Methods:客户端支持的压缩算法 -
Extension:扩展字段,如SNI(服务器名称指示) - Server Hello
-
版本:服务器选择的版本 -
Random:服务器随机数(随机数2) -
Session ID:服务器响应的会话ID -
Cipher Suite:服务器选择的加密套件 -
Compression Methods:服务器选择的压缩算法 - Certificate
-
服务器向客户端发送证书链,通常包括服务器证书和中间证书 - Server Key Exchange
-
服务器发送公钥交换的额外数据 -
对于ECDHE算法,包括椭圆曲线参数和服务器的公钥 - Server Hello Done
-
服务器通知客户端握手消息发送完毕 - Client Key Exchange
-
客户端发送自己的公钥 -
客户端和服务器都有了对方的公钥,可以计算共享密钥 - Change Cipher Spec
-
客户端通知服务器将使用协商好的密钥加密后续通信 - Encrypted Handshake Message
-
客户端发送加密握手消息,使用会话密钥加密 - Change Cipher Spec
-
服务器通知客户端将使用协商好的密钥加密后续通信 - Encrypted Handshake Message
-
服务器发送加密握手消息,使用会话密钥加密 - Application Data
-
双方使用会话密钥进行加密通信
证书验证过程
证书验证是HTTPS连接过程中的关键环节,确保服务器的身份真实可靠。证书验证过程包括以下几个步骤:
- 证书链验证
-
客户端通过服务器证书中签发机构信息,获取到中间证书公钥 -
利用中间证书公钥进行服务器证书的签名验证 -
然后通过中间证书中签发机构信息,客户端本地查找到根证书公钥 -
利用根证书公钥进行中间证书的签名验证[31] - 证书合法性校验
-
校验证书是否是受信任的CA根证书颁发机构颁发 -
校验证书是否在上级证书的吊销列表中 -
校验证书是否过期 -
校验证书域名是否与访问域名匹配[26] - 证书吊销检查
-
检查证书是否被吊销,通常通过CRL或OCSP完成 - 证书有效期检查
-
检查证书的Not Before和Not After字段,确保证书在有效期内
密钥协商过程
TLS握手的核心是密钥协商,通过非对称加密实现身份认证,然后协商对称加密使用的密钥。以下是ECDHE算法的密钥协商过程:
- 服务器端
-
选择椭圆曲线secp256r1,作为ECDHE中的EC基点G -
生成随机数作为椭圆曲线的私钥 -
根据基点G和私钥计算出椭圆曲线的公钥 -
将公钥发送给客户端 - 客户端
-
接收服务器的椭圆曲线公钥 -
生成自己的随机数作为椭圆曲线的私钥 -
根据基点G和私钥计算出椭圆曲线的公钥 -
将公钥发送给服务器 - 共享密钥计算
-
客户端和服务器都有了对方的公钥 -
双方都可以计算出曲线的坐标(x,y) -
x就是"共享密钥"或"会话密钥" - 会话密钥生成
-
使用客户端随机数、服务器随机数和共享密钥作为材料 -
生成真正的会话密钥,用于对称加密
加密通信过程
完成握手和密钥协商后,客户端和服务器使用协商好的对称加密算法和会话密钥进行加密通信。加密通信过程包括:
- 数据加密
-
使用对称加密算法(如AES-128-GCM)加密应用层数据 -
使用协商好的会话密钥作为加密密钥 - 数据完整性验证
-
使用消息摘要算法(如SHA-256)计算数据的哈希值 -
将哈希值与加密数据一起传输,用于验证数据完整性 - 数据解密
-
接收方使用相同的会话密钥解密加密数据 -
验证数据完整性,确保数据未被篡改
HTTPS认证中的常见问题
证书错误处理
当证书验证失败时,浏览器通常会显示安全警告或错误页面。常见的证书错误包括:
- 证书链不完整
服务器只发送了服务器证书,而未发送中间证书,导致客户端无法验证完整的证书链 - 证书域名不匹配
证书中的域名与访问的域名不匹配 - 证书过期
证书已过有效期 - 证书被吊销
证书已被CA吊销 - 不受信任的CA
证书颁发机构不受客户端信任
安全最佳实践
为了确保HTTPS连接的安全性,应遵循以下最佳实践:
- 使用最新版本的TLS
优先使用TLS 1.2或更高版本 - 配置安全的加密套件
优先使用ECDHE密钥交换和AEAD加密算法 - 使用有效的证书链
确保服务器发送完整的证书链,包括中间证书 - 实施OCSP stapling
服务器主动获取OCSP响应并发送给客户端,减少客户端额外请求 - 定期更新证书
在证书到期前及时更新 - 使用强随机数生成器
确保TLS握手过程中使用的随机数足够随机
结论
HTTPS认证过程是一个复杂而精密的机制,通过SSL/TLS协议为HTTP通信提供安全保障。从DNS解析到TLS握手,从证书验证到密钥协商,每个环节都紧密配合,确保数据传输的安全性。随着网络安全威胁的不断演变,HTTPS协议也在不断演进,TLS 1.3的推出带来了更高的安全性和性能。理解HTTPS认证过程的内部机制,有助于我们更好地配置和维护安全的网络服务,保护用户数据的安全。未来,随着量子计算等新技术的发展,密码学领域将面临新的挑战和机遇,HTTPS协议也将继续演进,以适应不断变化的安全环境。
参考资料
[2] SSL/TLS协议的运行原理浅析—https通信过程及CA证书诠释转载. https://blog.csdn.net/alpha_love/article/details/107896279.[6] 什么是SSL、TLS和HTTPS? - DigiCert. https://www.digicert.com/cn/what-is-ssl-tls-and-https.[11] TLS/SSL 工作原理及握手过程详解原创 - CSDN博客. https://blog.csdn.net/qq_38289815/article/details/107591115.[12] 什么是传输层安全性(TLS)? - Cloudflare. https://www.cloudflare.com/zh-cn/learning/ssl/transport-layer-security-tls/.[13] SSL/TLS协议工作原理原创 - CSDN博客. https://blog.csdn.net/weixin_43790779/article/details/129429594.[18] 学习SSL/TLS ,这一篇就够了本文将系统性介绍SSL/TSL证书相关知识. https://juejin.cn/post/7247045258844143674.[24] HTTPS详解二:SSL / TLS 工作原理和详细握手过程 - 稀土掘金. https://juejin.cn/post/6844904046063517704.[26] 一文详解HTTPS 与TLS证书链校验转载 - CSDN博客. https://blog.csdn.net/liuxiao723846/article/details/127739868.[31] 一文详解HTTPS 与TLS证书链校验转载 - CSDN博客. https://blog.csdn.net/liuxiao723846/article/details/127739868.[34] 学习SSL/TLS ,这一篇就够了本文将系统性介绍SSL/TSL证书相关知识. https://juejin.cn/post/7247045258844143674.[36] 证书链验证(国密). https://blog.csdn.net/weixin_43967758/article/details/106696047.[40] PKI/CA (4)根CA信任模型"证书构建"根认证机构 - CSDN博客. https://blog.csdn.net/thefist11cc/article/details/116568774.[41] 证书吊销: 了解CRL、OCSP 和OCSP 绑定的吊销检查 - GlobalSign. https://globalsign.cn/blog_detailed_219.[43] PKI课堂|什么是CRL、OCSP及OCSP Stapling?-锐成信息. https://www.racent.com/blog/569.[51] DNS解析过程:从域名到IP地址的转换原创 - CSDN博客. https://blog.csdn.net/weixin_43672168/article/details/131617284.
原文始发于微信公众号(sec0nd安全):HTTPS认证过程详解:从SSL/TLS到证书链验证
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论