3

默认情况下,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

我在安装 KB 并更改注册表后重新启动了设备,但它仍然对我不起作用。下面是我用来测试更改的 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();
4

3 回答 3

1

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

于 2018-02-16T15:07:36.300 回答
1

我处于同样的情况。但是我现在可以在 POSready2009 上使用 TLS1.2 和 .NET Framework 3.5 应用程序。

我的机器也安装了 .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 xx]。

于 2018-11-29T03:30:32.373 回答
0

事实上,Quinoshita 是正确的。在 XP SP3 POSReady2009 中,在 IE 的选项中打开 TLS 1.2 似乎可以使 .Net 和使用 MSXML.XMLHTTP 和 MSXML2.ServerXMLHTTP 调用(例如)的旧语言在 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 选项复选框。我已经手动进行了他的一些其他更改。

于 2019-10-01T02:59:08.707 回答