如何修复解决“SSL握手失败”报错

错误类型:
安全相关错误
错误名称:
SSL握手错误
英文名称:
SSL Handshake Failed
错误描述:
SSL握手失败或错误525意味着服务器和浏览器无法建立安全连接。这可能由于多种原因而发生。

如何修复解决“SSL握手失败”报错

如今为网站设置安全套接字层 (SSL) 证书非常简单。您可以免费生成证书,许多托管服务提供商甚至会为您设置。但是,如果您没有正确配置您的证书,您可能会遇到诸如“SSL握手失败”之类的错误。

如果您遇到“SSL握手失败”错误消息并且对它的含义感到困惑,那么您并不孤单。这是一个常见的错误,它本身并不能告诉你太多。虽然这可能是令人沮丧的体验,但好消息是您可以采取一些简单的步骤来解决问题。

当您的浏览器和服务器无法建立安全连接时,会出现“SSL握手失败”错误。

在这篇文章中,我们将解释什么是SSL Handshake Failed错误以及导致它的原因。然后,我们将为您提供几种可用于修复它的方法。

  1. SSL握手简介
  2. 了解导致SSL握手失败的原因
  3. 如何修复SSL握手失败错误

SSL握手简介

在我们深入研究导致TLS或SSL握手失败的原因之前,了解什么是TLS/SSL握手会很有帮助。安全套接字层 (SSL)传输层安全性 (TLS)是用于验证服务器和外部系统(如浏览器)之间的数据传输的协议。

需要SSL证书才能使用HTTPS保护您的网站。我们不会太深入地讨论TLS与SSL之间的区别, 因为它是次要的。这些术语经常互换使用,因此为简单起见,我们将使用“SSL”来指代两者。

除此之外,SSL握手是建立HTTPS连接过程的第一步。为了验证和建立连接,用户的浏览器和网站的服务器必须经过一系列检查(握手),从而建立HTTPS连接参数。

让我们解释一下:客户端(通常是浏览器)向服务器发送安全连接请求。发送请求后,服务器会向您的计算机发送一个公钥,并根据证书列表检查该密钥。然后,计算机使用从服务器发送的公钥生成密钥并对其进行加密。

长话短说,没有SSL握手,就不会建立安全连接。这会带来重大的安全风险。此外,该过程涉及许多活动部件。

这意味着有很多不同的机会出现问题并导致握手失败,甚至导致“您的连接不是私密连接”错误,从而导致访问者离开。

您可能知道,SSL证书可以验证您网站的“身份”。它使用浏览器检查的加密密钥来确保证书有效。建立连接后,您的浏览器可以解密服务器发送的内容。

这个过程称为“握手”。以下是它更详细的工作原理:

  1. 您访问具有SSL证书的网站,并且您的浏览器发送数据请求。
  2. 服务器向浏览器发送一个加密的公钥。
  3. 您的浏览器检查该密钥并将其加密密钥发送回服务器。
  4. 服务器解密密钥并将加密内容发送回您的浏览器。
  5. 您的浏览器解密内容(从而完成握手)。

所有这一切都在几秒钟内发生。SSL证书和HTTPS协议使您的网站能够安全地传输数据,而不会对性能产生负面影响。这使得SSL证书对任何网站都至关重要。但是,就像您网站的任何元素一样,它有时会产生独特的问题。

了解导致SSL握手失败的原因

SSL握手失败或错误525意味着服务器和浏览器无法建立安全连接。这可能由于多种原因而发生。

通常,错误525表示使用Cloudflare的域与源Web服务器之间的SSL握手失败。

“SSL握手失败”错误准确地告诉您问题是什么。当您的浏览器无法与具有SSL证书的网站建立连接时,它会显示:

ssl-handshake-failed

在这个来自使用Cloudflare的网站的示例中,您可以看到“SSL握手失败”错误对应于“525”代码。因此,错误可能源于服务器端和客户端的问题。

但是,了解SSL错误可能发生在客户端服务器端也很重要。客户端SSL错误的常见原因包括:

  • 客户端设备上的错误日期或时间。
  • 浏览器配置错误。
  • 被第三方拦截的连接。

一些服务器端原因包括:

  • 密码套件不匹配。
  • 服务器不支持的客户端使用的协议。
  • 不完整、无效或过期的证书。

通常,如果SSL握手失败,问题可能是由于网站或服务器及其SSL配置有问题。

该列表包括本地问题,与您网站的服务器相关问题,一个特定于第三方服务的问题。在接下来的部分中,我们将探讨如何解决每个问题。

如何修复SSL握手失败错误

“SSL握手失败”错误背后有几个潜在原因。因此,当涉及到如何修复它时,没有简单的答案。

幸运的是,您可以使用一些方法来开始探索潜在问题并一一解决。让我们看一下可用于尝试修复SSL Handshake Failed错误的五种策略。

  1. 更新您的系统日期和时间
  2. 检查您的SSL证书是否有效
  3. 为您的浏览器配置最新的SSL/TLS协议支持
  4. 验证您的服务器是否已正确配置为支持SNI
  5. 确保密码套件匹配

1. 更新您的系统日期和时间

当您的浏览器尝试建立SSL握手时,它会根据您计算机的日期和时间验证证书。它这样做是为了验证SSL证书是否仍然有效。

如果您本地设备的日期和时间关闭,则可能会导致验证过程中出现错误(即没有握手)。幸运的是,这是一个简单修复的问题。

在Windows设备上,打开开始 菜单并输入日期和时间设置。选择出现的选项,会弹出一个新窗口。启用设置自动设置时间,并确保您的时区正确:

set-time-automatically

验证您的日期现在是否正确,然后尝试重新加载网站。

以下是在其他操作系统 (OS) 上修复日期和时间的方法:

如果在本地设备上修复日期和时间不起作用,您可以继续进行下一个修复。

2. 检查您的SSL证书是否有效

SSL证书上标有到期日期,以帮助确保其验证信息保持准确。通常,这些证书的有效期为六个月至两年。

如果SSL证书被吊销或过期,浏览器将检测到这一点并且无法完成SSL握手。如果您在网站上安装SSL证书已经超过一年左右,那么可能是时候重新颁发它了。

要查看SSL证书的状态,您可以使用SSL证书检查工具 ,例如Qualys提供的工具:

Qualys网站上的SSL服务器测试工具

Qualys网站上的SSL服务器测试工具

该工具既可靠又免费使用。您需要做的就是在Hostname字段中输入您的域名 ,然后单击Submit。一旦检查器完成对您网站的SSL配置的分析,它将为您提供一些结果:

 

Qualys SSL检查工具的结果页面

Qualys SSL检查工具的结果页面

在此页面上,您可以查看您的证书是否仍然有效,并查看它是否因任何原因被吊销。

在任何一种情况下,更新您的SSL证书都应该可以解决握手错误(这对于确保您的网站和WooCommerce商店的安全至关重要)。

3. 为您的浏览器配置最新的SSL/TLS协议支持

有时,确定问题根本原因的最佳方法是消除过程。正如我们前面提到的,SSL握手失败通常是由于浏览器配置错误而发生的。

确定特定浏览器是否存在问题的最快方法是尝试切换到其他浏览器。这至少可以帮助缩小问题范围。您也可以尝试禁用任何插件并将浏览器重置为默认设置。

另一个潜在的与浏览器相关的问题是协议不匹配。例如,如果服务器仅支持TLS 1.2,但浏览器仅配置为TLS 1.0或TLS 1.1,则没有相互支持的协议可用。这将不可避免地导致SSL握手失败。

如何检查此问题是否发生取决于您使用的浏览器。作为一个例子,我们将看看这个过程在Chrome中是如何工作的。首先,打开浏览器并转到设置 > 高级。这将扩展许多菜单选项。

在“系统 ”部分下,单击“打开计算机的代理设置”

Google Chrome中的系统设置页面

Google Chrome中的系统设置页面

这将打开一个新窗口。接下来,选择高级选项卡。在安全部分下,检查是否选中了使用TLS 1.2旁边的框 。如果没有,请检查该选项:

Windows中的Internet属性高级设置

Windows中的Internet属性高级设置

还建议您取消选中SSL 2.0和SSL 3.0的复选框。

这同样适用于TLS 1.0和TLS 1.1 ,因为它们正在被淘汰。完成后,单击“ 确定” 按钮,然后检查握手错误是否已解决。

请注意,如果您使用的是Apple Safari或Mac OS,则没有启用或禁用SSL协议的选项。默认情况下会自动启用TLS 1.2。如果您使用的是Linux,您可以参考Red Hat guide on TLS hardening

4. 验证您的服务器是否正确配置为支持SNI

SSL 握手失败也可能是由不正确的服务器名称指示 (SNI) 配置引起的。SNI使Web服务器能够为一个IP地址安全地托管多个TLS证书。

服务器上的每个网站都有自己的证书。但是,如果服务器未启用SNI,则可能导致SSL握手失败,因为服务器可能不知道要提供哪个证书。

有几种方法可以检查网站是否需要SNI。一种选择是使用我们在上一节中讨论过的Qualys的SSL服务器测试。输入您网站的域名,然后单击提交按钮。

在结果页面上,查找显示“This site works only in browsers with SNI support”的消息:

Qualys SSL检查器工具的摘要结果页面

Qualys SSL检查器工具的摘要结果页面

另一种检测服务器是否使用SNI的方法是浏览“ClientHello”消息中的服务器名称。这是一个技术性更强的过程,但它可以提供很多信息。

它涉及检查“server_name”字段的扩展hello标头,以查看是否提供了正确的证书。

如果您熟悉使用OpenSSL工具包 和Wireshark等工具,您可能会发现此方法更可取。您可以使用openssl s_client或不使用该-servername选项:

# without SNI
$ openssl s_client -connect host:port 
# use SNI
$ openssl s_client -connect host:port -servername host

如果您获得了两个同名的不同证书,则意味着SNI受支持且配置正确。

但是,如果返回的证书中的输出不同,或者没有SNI的调用无法建立SSL连接,则表明需要SNI但未正确配置。解决此问题可能需要切换到专用IP地址。

5. 确保密码套件匹配

如果您仍然无法确定SSL握手失败的原因,则可能是由于密码套件不匹配。如果您不熟悉该术语,“密码套件”是指一组算法,包括用于密钥交换、批量加密和消息身份验证代码的算法,可用于保护SSL和TLS网络连接。

如果服务器使用的密码套件不支持或不匹配Cloudflare使用的密码套件,则可能导致“SSL握手失败”错误。

在确定是否存在密码套件不匹配时,Qualys的SSL服务器测试再次证明是一个有用的工具。

当您输入您的域并单击提交时,您将看到一个摘要分析页面。您可以在“Cipher Suites ”部分下找到密码信息:

Qualys SSL报告中的密码套件部分

Qualys SSL报告中的密码套件部分

您可以使用此页面来发现服务器支持的密码和协议。您需要注意任何显示“弱”状态的内容。此外,本节还详细介绍了密码套件的具体算法。

要更正此问题,您可以使用您的浏览器工具的Qualys SSL/TLS功能将结果与您的浏览器支持的内容进行比较。有关密码套件的更多信息和指导,我们还建议查看ComodoSSLStore指南

小结

最令人困惑但最常见的SSL相关问题类型之一是“SSL握手失败”错误。处理此错误可能会带来压力,因为它有许多潜在原因,包括客户端和服务器端问题。

但是,您可以使用一些可靠的解决方案来识别问题并加以解决。您可以使用以下五种方法来修复SSL Handshake Failed错误:

  1. 更新您的系统日期和时间。
  2. 检查您的SSL证书是否有效(必要时重新颁发)。
  3. 配置您的浏览器以支持最新的TLS/SSL版本。
  4. 验证您的服务器是否已正确配置为支持SNI。
  5. 确保密码套件匹配。

评论留言