- A+
本文我们将主要介绍SSL / TLS握手失败错误的所有可能原因以及修复方法,我们将针对每个原因去分析解决方法,供大家参考。
一、SSL / TLS握手失败错误原因
原因 | TLS握手错误的描述 | 固定 |
系统时间不正确 | 客户端设备的时间和日期不正确。 | 客户 |
浏览器错误 | 浏览器配置导致错误。 | 客户 |
中间人 | 第三方正在拦截/操纵连接。 | 客户 |
协议不匹配 | 服务器不支持客户端使用的协议。 | 服务器 |
密码套件不匹配 | 服务器不支持客户端使用的密码套件。 | 服务器 |
证书不正确 | 1.URL主机名与服务器证书上的主机名不匹配。 | 服务器 |
2.呈现给客户端的证书链不完整/无效。 | ||
3.吊销/到期的SSL / TLS证书已发送到客户端或服务器。 | ||
4.内部网络中自签名证书的替换导致路径构建错误。 | ||
启用SNI的服务器 | 客户端无法与启用SNI的服务器通信。 | 服务器 |
二、SSL / TLS握手失败错误原因分析及解决方法
1、系统时间不正确
系统时间不正确导致的SSL / TLS握手失败,很明显是因为不小心删除了系统时钟。这主要是由于SSL / TLS证书的使用寿命有限,因此时间很重要。实际上,在一些知名度很高的SSL证书过期情况下,互联网用户甚至故意将其系统时间设置为上述过期之前的日期,以便他们仍然可以连接。
如果是不需要更改系统时间,仍然出现SSL / TLS握手失败错误,并且系统时间正确,则问题可能出现在浏览器错误。
2、浏览器错误
有时,您的浏览器可能配置错误,或者插件可能导致工作方式略有不同,从而导致连接至其他合法网站的问题。虽然确切诊断需要在当前浏览器上进行调整的操作可能会有些困难,但是将问题缩小到特定的浏览器错误非常简单:只需尝试另一个浏览器,看看会发生什么。如果您使用的是Google Chrome浏览器,请切换到操作系统的本机浏览器。
基本上,只需将其切换并尝试连接到该站点即可。如果您收到相同的SSL / TLS握手失败错误,则说明不是由浏览器引起的问题。但是,如果您可以连接,现在您知道插件或设置有问题。
解决此SSL / TLS握手错误的最快方法是将浏览器重置为默认设置并禁用所有插件。从那里,您可以根据需要配置浏览器,并在进行调整时测试与该站点的连接。这可能会花费一些时间,但实际上,这是解决您的浏览器配置错误或出现错误的唯一方法。
3、中间人
中间人(MITM)通常表示为试图窃取信息或造成危害的邪恶的黑客。实际上并非总是如此。许多程序和设备会拦截流量以进行检查或其他非恶意目的(例如负载平衡),然后将其发送到应用程序服务器。从技术上讲,此过程也构成了一个MITM。
有时这些设备的问题可能导致TLS握手失败。可能是阻止连接的网络防火墙之类,也可能是服务器端网络上边缘设备上的配置。因此,根据情况,此问题实际上可以是客户端修复或服务器端修复。
事情是这样的:如果此问题是客户端问题,则在使用防病毒或VPN上的设置时可能会暴露自己的风险。通常应该有一种方法可以将有问题的网站列入白名单或创建例外。但是永远不要丢弃防火墙或杀毒软件,只需连接到网站即可。如果问题在服务器端,则很可能是边缘设备上的配置问题。
4、服务器端错误
大多数情况下,SSL / TLS握手失败是服务器端问题的结果。其中有些很容易修复,有些涉及更多,有些可能根本不值得修复。接下来,我们来看看具体的情况:
1)协议不匹配
这实际上是在客户端和服务器端都可能发生的错误,并且根据上下文的不同,它实际上可能是不值得修复的错误。在支持协议和密码方面,最重要的智慧是:始终向前,永不向后。
TLS 1.2于十多年前问世,但仍有一小部分网站不支持它。IETF于2018 年最终将TLS 1.3发布为RFC 8446。截至2020年8月,Qualys SSL Labs报告称,Alexa排名前150,000个站点中有98.4%支持TLS 1.2,而32.8%支持TLS 1.3。
从另一方面讲,PCI DSS要求所有收集支付卡信息的网站都必须终止对SSL 3.0和TLS 1.0的支持。谷歌,Firefox,苹果和微软这四大浏览器制造商联合宣布,TLS 1.1将于2020年弃用。
如果由于协议不匹配而导致SSL / TLS握手失败错误,则意味着客户端和服务器对相同的TLS版本没有相互支持。这是一个例子:
在这种情况下,没有相互支持的TLS协议,并且服务器可能不支持向后版本控制。在您问之前,不,服务器不应修复此问题。在此示例中,客户端应升级其浏览器,或者在浏览器为最新版本的情况下,对其进行配置以支持最新的TLS版本。
此时,您应该使用TLS 1.2或TLS 1.3。如果不是,请添加对它们的支持。但是请记住,永远不要倒退。
2)密码套件不匹配
密码套件不匹配与协议不匹配类似,只是粒度更细。SSL / TLS不仅是一种处理所有问题的算法(尽管ECC很接近),它实际上是一组算法,可提供不同的功能并共同构成SSL / TLS。
SSL / TLS就像Megazord,密码套件就像Power Rangers。无论如何,虽然TLS 1.3使用的密码套件已经过改进,但传统上,密码套件具有处理以下内容的算法:
- 对称公钥加密
- 对称会话密钥加密
- 密钥生成
- 签名哈希
不同的行业和政府机构具有不同的加密标准,这些标准建议使用不同的密码套件。通常,那里有很多重叠之处,并且大多数网站都支持少数密码套件,因此客户端可以有多种选择,并且通常能够找到一个相互同意的密码。显然,如果站点仅支持单个密码套件,则成功协商的几率将大大降低。
通常,如果执行SSL桥接,则这可能会在网络内发生,边缘设备在其中接收和解密HTTPS流量,然后对其进行重新加密,然后发送到应用程序服务器。如果边缘设备和应用程序服务器不共享相互支持的密码套件,则将导致错误。
与协议版本非常相似,您应该只使用密码套件前进,而绝不应该倒退。请记住,不赞成使用协议版本或密码套件的原因不是因为该行业正在努力解决难题,而是因为已经发现或迫在眉睫。因此,向后移动只会使连接的安全性降低。
5、不正确的SSL / TLS证书
有很多不同的事情可以使浏览器将SSL / TLS证书视为错误,并阻止握手成功完成。如下:
问题 | 描述 |
主机名不匹配 | 证书中的CN与主机名不匹配。 |
证书链不正确 | 证书链缺少中间体。 |
证书已过期/已撤销 | 服务器提供了已过期,已吊销或不受信任的证书。 |
自签名替换 | (内部网络)证书替换路径混乱。 |
1)主机名不正确:这曾经是WWW和非WWW版本的网站的问题。但是,证书颁发机构社区已大大缓解了此问题,允许其免费列为SAN(主题备用名称)域。通常可以通过重新颁发证书或有时使用通配符证书来解决此问题。
2)证书链不正确:SSL / TLS和PKI中的信任模型通常依赖于精心策划的根程序。这些是从字面上存在于计算机系统中的受信任CA根证书的集合。
市场上的CA机构如此之多,以至于证书颁发机构可以旋转中间根并使用这些中间层对SSL / TLS(最终用户)证书进行签名,而不是直接从它们发出风险。这是链开始出现的地方。根CA证书用于对中间根进行数字签名。这些中间物用于签署其他中间物或最终用户SSL / TLS证书。
当浏览器收到SSL / TLS证书时,检查其真实性的其中一项工作就是签名。它查看SSL / TLS证书上的数字签名,并将其返回到对其进行签名的中间根。
然后,它查看网站的数字签名,并将其返回给签署该网站的证书。依此类推,直到最终,它到达其信任库中的根CA证书之一。
如果无法做到这一点,那么证书链通常是不完整的,这意味着浏览器无法找到其中一个中间件,并且SSL / TLS握手失败。为了解决这个问题,您将需要找到并安装缺少的中间证书。根据您从哪个CA购买证书,它们应该在其网站上提供其中间体。
因此,美国主机资讯提示大家,一定要购买国际受信任的SSL证书,比如:GeoTrust、Comodo、DigiCert
3)过期/吊销的证书:尽管当前SSL / TLS生态系统中的证书吊销还有很多需要改进,但在某些情况下,浏览器仍会看到证书已被吊销,并且在此基础上的握手失败。通常,这是证书过期的结果。SSL / TLS证书仅在一定时间内有效。
相关阅读推荐:《SSL证书过期的危害》
4)自签名替换:在公共互联网上,如果客户端尚未在根存储中手动安装您的私有根,则自签名证书将在100%的时间内返回错误。但是,在内部网络上,自签名证书相当普遍。如果将它们交换出去足够多,则可能会导致问题。
大多数浏览器都会缓存证书,以便在返回网站后可以更快地进行握手。但是,如果您要定期生成新证书,则将所有这些新生成的证书连续添加到本地数据库中会引起混乱。最终,浏览器将难以进行路径构建和崩溃。
6、启用SNI的服务器
这是设备之间存在的内部问题,但是有时客户端在未启用SNI的情况下与服务器名称指示服务器进行通信可能是SSL / TLS握手失败的原因。
您需要做的第一件事是确定所讨论服务器的主机名和端口号,并确保它已启用SNI并正在传达所需的一切。同样,这通常不是一个面向公众的问题,但是可能是内部不时引起的。
(本文由美国主机资讯原创,转载请注明!)
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫