TLS1.2 TLS1.3握手协议区别和问题排查
TLS1.2 TLS1.3握手协议区别和问题排查
本文将深入探讨SSL/TLS握手协议的工作原理及其在TLS 1.2和TLS 1.3版本中的区别,并提供详细的故障排查指南。无论是客户端还是服务器端的问题,你都将在这里找到解决方案。
SSL/TLS握手协议是什么?
在每个HTTPS连接开始时,客户端(用户的web浏览器)和服务器(托管网站)必须经过一系列检查,以相互验证并确定加密连接的参数。TLS握手完成三件事:
- 将服务器验证为非对称公钥/私钥对的合法所有者
- 确定将用于连接的TLS版本和密码套件
- 交换将用于通信的对称会话密钥
从历史上看,握手给连接增加了一点延迟,但TLS协议的最新版本已经解决了这种延迟问题。目前,有两种不同版本的TLS握手正在使用中:
- TLS 1.2使用握手,在客户端和服务器之间进行多次往返。
- TLS 1.3将TLS握手改进为一次往返,这减少了连接启动所需的时间,并使一切都更加高效。
SSL/TLS握手失败错误概述
为了使本文更易于理解,我们将介绍SSL/TLS握手失败错误的所有可能原因以及谁可以修复这些错误:
原因 | 描述 | 解决方案 |
---|---|---|
系统时间不正确 | 客户端设备的日期和时间不正确 | 客户端 |
浏览器错误 | 浏览器配置错误导致的错误 | 客户端 |
中间人攻击 | 第三方拦截或操纵连接 | 客户端 |
协议不匹配 | 客户端使用的协议服务器不支持 | 服务器 |
密码套件不匹配 | 客户端使用的密码套件服务器不支持 | 服务器 |
证书不正确 | URL主机名与服务器证书不匹配 证书链不完整或无效 证书已过期或吊销 | 服务器 |
SNI启用服务器 | 客户端无法与SNI启用的服务器通信 | 服务器 |
SSL/TLS握手失败-客户端错误
当握手失败时,通常是网站/服务器及其SSL/TLS配置的问题。但是,在一些上下文中,客户端错误也可能导致SSL/TLS握手失败错误。
系统时间不正确
确保你的系统时间正确。SSL/TLS证书的寿命有限,时间很重要。如果系统时间不正确,可能会导致TLS握手出现问题。
浏览器错误
尝试使用另一个浏览器。如果你使用的是Google Chrome,可以切换到苹果Safari或微软Edge等操作系统的原生浏览器,或者使用Mozilla Firefox。如果在其他浏览器中能够正常连接,说明可能是当前浏览器的插件或设置有问题。解决方法是将浏览器重置为默认设置并禁用所有插件。
中间人攻击
中间人(MITM)通常被描述为企图窃取信息或造成伤害的邪恶黑客。有时,这些设备的问题会导致TLS握手失败。如果问题是客户端,你可以尝试调整防病毒或VPN设置。一般来说,应该有一种方法可以列出白名单,或者为有问题的站点创建一个异常。
SSL/TLS握手失败:服务器端错误
大多数时候,SSL/TLS握手失败是服务器端问题的结果。
协议不匹配
这实际上是一个在客户端和服务器端都可能发生的错误。如果由于协议不匹配而导致SSL/TLS握手失败错误,则意味着客户端和服务器对同一TLS版本没有相互支持。服务器不应该修复这个问题。在此示例中,客户端应升级其浏览器,或者在浏览器为当前版本的情况下,将其配置为支持最新的TLS版本。
密码套件不匹配
这与协议不匹配非常相似——只是更精细一些。SSL/TLS不仅仅是一个处理所有事情的算法,它实际上是一个提供不同功能并与SSL/TLS协同工作的算法集合。如果执行SSL桥接(边缘设备接收和解密HTTPS通信量,然后对其进行重新加密,以便将其发送到应用程序服务器),则在网络中经常会发生这种情况。如果边缘设备和应用程序服务器不共享相互支持的密码套件,将导致错误。
SSL/TLS证书不正确
有很多不同的东西可以使浏览器将SSL/TLS证书视为不正确,并阻止握手成功完成。
- 主机名不正确:这曾经是WWW和非WWW版本的网站的一个问题,但证书颁发机构社区通常会减少这一问题,允许将一个站点免费列为SAN。此问题通常可以通过重新颁发证书或有时使用通配符证书来解决。
- 证书链不正确:当浏览器收到SSL/TLS证书时,它要做的检查其真实性的一件事就是跟踪签名。它查看SSL/TLS证书上的数字签名,然后返回到签名它的中间根。然后,它查看中间层的数字签名,并跟随它返回到签署中间层的证书。以此类推,直到最终到达其信任存储区中的一个根CA证书。如果它做不到这一点,证书链通常是不完整的,这意味着浏览器找不到中间层之一,并且SSL/TLS握手失败。要解决这个问题,您需要找到并安装丢失的中间证书。
- 过期/吊销的证书:虽然在当前的SSL/TLS生态系统中,撤销操作还有很多需要改进的地方,但在某些上下文中,浏览器将看到证书已被撤销,并且在此基础上握手失败。更常见的情况是由于证书过期。SSL/TLS证书的最大有效期是两年(27个月,因为CAs将允许您从以前的证书中携带最多3个月)。最终,可能会缩短到六个月。这意味着您需要定期交换证书。如果忘记了,这可能就是SSL/TLS握手失败的原因。只要获得一个有效的证书,并安装它-这应该可以解决你的问题。
- 自签名替换:在内部网络上,自签名证书相当常见。如果你把它们换得足够多,可能会导致问题。大多数浏览器都会缓存证书,这样在返回网站时,握手速度会更快,但是如果您定期生成新证书,不断地将所有新生成的证书添加到本地数据库将导致混乱,最终浏览器将难以构建路径并崩溃。
启用SNI的服务器
这更多的是设备之间存在的内部问题,但有时在未启用SNI时与服务器名称指示服务器通信的客户端可能是SSL/TLS握手失败的原因。首先要做的是确定所讨论的服务器的主机名和端口号,并确保它启用了SNI,并且它可以传递所需的所有信息。再说一次,这通常不是一个公众面临的问题,但它可能是不时的内部原因。
不要奖励糟糕的SSL/TLS实现
很多时候,网站所有者不想做任何改变,直到它产生了一个他们不能忽视的问题。虽然有一些针对SSL/TLS握手失败错误的客户端修复,但通常是服务器端的。这意味着作为一个普通的互联网用户,你的选择是有限的。最好的办法是通知网站所有者问题并等待他们解决。如果他们不这样做,最好停止使用网站。
不要:
- 放弃防火墙,你通常可以列出一个网站,但不要放弃防火墙。永远。
- 如果可能的话,不要再次禁用你的防病毒软件,但是要保持更新和开启。
- 不要通过HTTP连接或单击间隙警告
- 如果网站不能提供安全的浏览体验,你不应该访问它。