默认情况下,Windows Embedded PosReady 2009 上未启用对 TLS1.2 的支持。
然而,微软发布了 KB4019276 (https://support.microsoft.com/en-us/help/4019276/update-to-add-support-for-tls-1-1-and-tls-1-2-in -windows)添加了此支持。
我已按照本文中的定义将注册表 DWORD DisabledByDefault 添加到下面的项中。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server
我在安装知识库并更改注册表后重新启动了设备,但它仍然对我不起作用。下面是我用来测试更改的 TLS1.2 代码。
例外是
System.NotSupportedException: The requested security protocol is not supported.
at System.Net.ServicePointManager.set_SecurityProtocol(SecurityProtocolType value)
代码使用 .net 3.5 编译,3.5 是该设备支持的最高 .net 框架。
Console.WriteLine("Press Enter to send TLS1.2 to google.com");
Console.ReadLine();
System.Net.ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // Sets TLS1.2. This will only work if the OS supports it.
string url = "https://www.google.com";
var req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "GET";
var resp = req.GetResponse();
var outStream = resp.GetResponseStream();
string output = "";
using (StreamReader rdr = new StreamReader(outStream))
{
output = rdr.ReadToEnd();
}
Console.WriteLine(output);
Console.ReadLine();
Microsoft 不支持低于 4.5 的 .NET 版本的 TLS1.2,该版本无法安装在 Embedded POS Ready 2009 上。他们提供的解决方案非常糟糕!
我也遇到同样的情况。但我现在可以在 POSready2009 上通过 .NET Framework 3.5 应用程序使用 TLS1.2。
我的机器也安装了.NET Framework 4.0。然后应用所有“Windows 更新”。 (如果某些更新因证书错误而失败,请检查“安装或删除Windows组件”中的[更新根证书])
安装 KB4019276 后,我尝试对 regstory 进行以下更改:
REG DELETE "HKLM\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\CRYPTO\TLS1.2" /v OSVersion /f
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client" /v DisabledByDefault /t REG_DWORD /d 0
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client" /v Enabled /t REG_DWORD /d 0
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client" /v Enabled /t REG_DWORD /d 0
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client" /v Enabled /t REG_DWORD /d 0
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client" /v Enabled /t REG_DWORD /d 0
然后您可以在Internet选项的高级选项卡中找到[使用TLS 1.2]。开启[使用 TLS 1.2]并关闭其他[使用 TLS/SSL x.x]。
Quinoshita 事实上是正确的。在 XP SP3 POSReady2009 中,在 IE 选项中打开 TLS 1.2 似乎可以使利用 MSXML.XMLHTTP 和 MSXML2.ServerXMLHTTP 调用(例如)的 .Net 和旧语言通过 TLS 1.2 工作。我正在运行 VB6 应用程序,并且能够使用这段代码确认 TLS 1.2 连接:
Sub Main()
Dim objhttp As New MSXML2.ServerXMLHTTP60
'or unrem this to test XMLHTTP
'Dim objhttp As New MSXML2.XMLHTTP60
objhttp.open "GET", "https://howsmyssl.com/a/check", False
'next line not required, just
objhttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0"
objhttp.setRequestHeader "Content-type", "text/html"
objhttp.send
Debug.Print objhttp.responseText
Set objhttp = Nothing
End Sub
只要响应包含
"tls_version":"TLS 1.2"
,那么它就可以正常工作。
我对他的帖子中的 REG DELETE 命令持怀疑态度,但这对我有用,并在控制面板的 Internet 选项中显示了 TLS 1.2 选项复选框。我已经手动对其进行了一些其他更改。
如果有人对此仍然感兴趣,我使用
.NET Framework 4.0
中的 MSXML2.XMLHTTP60
for Windows XP SP3(POSReady2009,通过 https://legacyupdate.net更新)编译了一个
msxml6.dll
C# 库示例,如上所述:
https://github.com/karabaja4/legacy-http-client
它似乎适用于大多数 HTTPS URL。