我有一个VBScript程序,从不受我控制的服务器检索网页。 该URL看起来像https://someserver.xxx/index.html 。 我使用这段代码来创build页面获取的对象:
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
答:有没有人对Web服务器端可能发生的任何问题有任何build议或意见(我无法与Web服务器的pipe理员进行交stream,以了解他们所做的更改)。
B.有没有办法可以改变我的VBScript代码来解决这个问题? SSL版本可以被强制吗?
VB显然不理解/解码完整的TLS协议; 在这种情况下是TLS警报(即消息types0x15)。
我当然不是VB程序员,但我相信你可以设置一个属性(我通过咨询了解到http://www.chilkatsoft.com/refdoc/vbnetSocketRef.html):SslProtocol as String“SSL 3.0”
看起来他们在升级时降低了安全性。 TLS安全似乎不起作用。 这可能是因为您在检查默认或validationTLS安全性的补丁的结果。 获取页面后,您应该能够识别浏览器中使用的安全性。 我会尝试联系[email protected],因为他们可能不打算不符合TLS安全。
如果VBScript使用Internet Explorer设置,则可以尝试禁用IE中的所有TLS密码。 这应该强制VBScript协商SSLv3或SSLv2密码。 我将从禁用3DES开始,因为使用安全实现连接到服务器时存在Windows问题。