未指定 SSL 协议时可能导致 https 失败的原因有哪些?

未指定 SSL 协议时可能导致 https 失败的原因有哪些?

我有一个 VBScript 程序,它从不受我控制的服务器检索网页。 URL 类似于https://someserver.xxx/index.html。 我使用此代码创建执行页面获取的对象:

Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")

当我编写程序时,它检索此页面没有任何问题。最近,提供此页面的 Web 服务器进行了升级。现在我的程序无法再获取该页面。

一些线索:

线索 1. 如果我使用浏览器,我可以获取网页(我试过 Firefox、IE 和 Chrome)。

线索 2. VBScript 代码产生此错误:

收到的消息是意外的或者格式错误。

线索 3. 在某些情况下我可以从命令行获取网页,但在其他情况下则不行:

curl --sslv3 -v -k 'https://someserver.xxx/index.html' # WORKS!
curl --sslv2 -v -k 'https://someserver.xxx/index.html' # WORKS!
curl -v -k 'https://someserver.xxx/index.html'         # FAILS
curl --tlsv1 -v -k 'https://someserver.xxx/index.html' # FAILS

如果我没有指定协议,我会收到此错误:

* SSLv3, TLS handshake, Client hello (1):
* error:14077417:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert illegal parameter
* Closing connection #0

在我指定的情况下,--tlsv1我会收到此错误:

* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS alert, Server hello (2):
* error:14094417:SSL routines:SSL3_READ_BYTES:sslv3 alert illegal parameter
* Closing connection #0

A. 有人对网络服务器端可能发生的事情有任何建议或想法吗(我无法与网络服务器的管理员交谈以了解他们做了哪些更改)。

B. 有没有办法可以更改我的 VBScript 代码来解决此问题?可以强制使用 SSL 版本吗?

答案1

VB 显然不理解/解码完整的 TLS 协议;在这种情况下是 TLS 警报(即消息类型 0x15)。

我当然不是 VB 程序员,但我相信你可以设置一个属性(这是我通过咨询了解到的http://www.chilkatsoft.com/refdoc/vbnetSocketRef.html): SslProtocol 作为字符串“SSL 3.0”

答案2

看起来他们在升级时降低了安全性。TLS 安全性似乎不起作用。这可能是由于您这边的补丁检查默认或验证 TLS 安全性所致。在获取页面后,您应该能够识别浏览器中正在使用的安全性。我会尝试联系[电子邮件保护],因为他们可能并不打算不遵守 TLS 安全规定。

如果 VBScript 使用的是 Internet Explorer 设置,您可以尝试禁用 IE 中的所有 TLS 密码。这应该会强制 VBScript 协商 SSLv3 或 SSLv2 密码。我会从禁用 3DES 开始,因为使用安全实现连接到服务器时会出现 Windows 问题。

相关内容