Set objHttp = CreateObject("Msxml2.ServerXMLHTTP")
Set objHttp = CreateObject("Msxml2.ServerXMLHTTP.6.0")
Set
objHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
由於近年來因為銀行端要求 Https 安全程級必須為 TLS 1.2
因而發現在舊版OS系統上,同樣的程式運作卻是不正常
按照微軟KB文件,修改Registry登錄檔後,仍然無法解決問題
後來發現使用CreateObject("WinHttp.WinHttpRequest.5.1") 可以指定SSL、TLS 1.0、TLS 1.2 版本
就不再使用以往常用的 CreateObject("Msxml2.ServerXMLHTTP") 物件 ( 對應 WinHttp.dll )
但是在我的開發環境下,使用CreateObject("WinHttp.WinHttpRequest.5.1") 仍然不能正常作業
一直搞不懂是哪個環節有問題...
後來看到一篇文章 提到 TLS1. 與 WinHttp.dll 的關係,他的測試是以 .NET Visual Studio 來檢測 WinHttp.dll
可以發現 我這台電腦的 WinHttp.dll 只支援到 TLS 1.0
作業系統: Server 2008 SP2 (非 R2版)
另一台 Windows 7 的電腦,其 WinHttp.dll 也只支援到 TLS 1.0
按照國外網友的分析如下:
on Windows 7 and windows 2008 R2 server winHTTP.dll version 6.1.7601.17514
on windows 2012 server winHTTP.dll version 6.2.9200.16451
winHTTP.dll version 6.1.7601.17514 is not working with TLS1.1 and TLS 1.2
winHTTP.dll version 6.2.9200.16451 is working ok
另外提供一個檢測方法 (訪問 https://howsmyssl.com/a/check )
會有下列回應字串<% Set objHttp = Server.CreateObject("WinHTTP.WinHTTPRequest.5.1") objHttp.open "GET", "https://howsmyssl.com/a/check", False objHttp.Send Response.Write objHttp.responseText Set objHttp = Nothing %>
"tls_version":"TLS 1.2"
在我的 OS: Server 2008 SP2
使用 IE 核心 訪問https://howsmyssl.com/a/check
結果如下:
但是使用 Firefox 訪問https://howsmyssl.com/a/check
結果如下:
結論: 搭配微軟的元件 + 能不能使用 TLS 1.2 受限於 WinHttp.dll 。而該元件受限於OS版本
但是例如 Firefox 使用自家的元件,就不受限(也與 OS版本 無關)
沒有留言:
張貼留言