Windows XP 嵌入式 PosReady 2009 支持 TLS1.2

问题描述 投票:0回答:4

默认情况下,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();
c# security ssl tls1.2 posready
4个回答
1
投票

Microsoft 不支持低于 4.5 的 .NET 版本的 TLS1.2,该版本无法安装在 Embedded POS Ready 2009 上。他们提供的解决方案非常糟糕!


1
投票

我也遇到同样的情况。但我现在可以在 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]。


0
投票

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 选项复选框。我已经手动对其进行了一些其他更改。


0
投票

如果有人对此仍然感兴趣,我使用

.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。

© www.soinside.com 2019 - 2024. All rights reserved.