当我在本地网络上下载 HTTPS 资源(从互联网主机,如 dl.google.com)时,我经常收到以下错误:
错误:1408F119:SSL 例程:SSL3_GET_RECORD:解密失败或记录错误 mac
这使得通过 HTTPS 下载任何内容实际上变得不可能。
这个问题只发生在下载相对较大的文件(即超过几十 MB)时,浏览网页时不会发生。下载有时会随机失败,无论是使用浏览器还是使用 curl/wget 等命令行工具。
例如:
$ curlhttps://dl.google.com/android/repository/android_m2repository_r46.zip
...
curl:(56)SSL 读取:错误:1408F119:SSL 例程:SSL3_GET_RECORD:解密失败或记录 mac 错误,errno 0
我在不同的机器(ubuntu 和 OS X)上遇到了同样的问题,但只有当它们在这个网络上时才会出现。因此,我认为问题出在我本地网络的基础设施上。
任何想法?
搜索引擎针对此错误信息进行研究的结果:
- 在这个问题这是特定主机特有的服务器端错误,与我无关,因为我在几个主要主机上都观察到了这个问题(例如 dl.google.com)
- 我发现与以下具体相关的问题节点,Apache 流量服务器和OpenSSL,但就我而言,问题发生在不同的操作系统上,并且仅当它们位于特定的本地网络上时。
答案1
具体症状表明主机和客户端之间可能存在某种形式的数据包丢失。
请记住,HTTPS 是 HTTP 的加密形式,是一种“尽力而为”的协议,与 FTP 或 SCP 不同,后者会维护连接并自动重新传输坏数据。
由于协议是加密的,通过 HTTPS 传输的数据必须在客户端解密后才能显示或打开。错误消息报告此解密阶段失败。至于原因,没有太多细节,只是说它没有起作用。
由于这似乎只影响大文件,而不影响小文件,因此我们可以立即假设通过少量数据包发送的文件可以正常工作,而通过大量数据包发送的文件容易出现故障。故障也是随机的。这些故障会影响单个网络上的多个客户端(使用多个浏览器和操作系统),但在其他网络上不会观察到。
LAN 上所有客户端的共同组件是该 LAN 的网关。从逻辑上讲,网关上的某些东西在传输过程中偶尔会破坏数据。
虽然我不能肯定地说“数据包丢失”或其他与网络相关的传输故障是原因,但我怀疑情况确实如此。检查交换机的日志(如果受管理)或对文件传输进行 Wireshark 分析应该可以找出罪魁祸首。