新聞速報

        

2018年4月11日 星期三

Https 通訊 與 TLS 1.2

使用 Https 通訊物件時,通常使用下列 COM 物件

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版本 無關)

沒有留言:

張貼留言