如何解决在 WinRT 应用程序中,如何使用 TLS1.2 进行连接?
我有一个 Windows 应用商店应用,它是一个 WinRT 手机/桌面应用(即不是 UWP 应用),面向 Windows 8.1 及更高版本。
它已经在商店里好几年了,但最近它停止能够使用 HTTPS 连接到各种网络 API 和网站(YouTube,以及我自己的网站)。
我也有这个应用程序的 WPF 版本,最近在那个应用程序上也发生了这种情况,为了修复它,我使用了 System.Net.ServicePointManager
。不幸的是,在我的 WinRT 环境中,System.Net
不包含 ServicePointManager
。在我的 WPF 应用程序中,我这样做了,而且效果很好:
ServicePointManager.ServerCertificateValidationCallback = delegate
{
Debug.WriteLine("returning true (the ssl is valid)");
return true;
};
// our server is using TLS 1.2
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
在互联网上进行一些研究时,似乎 .NET 4.6 应该包含 ServicePointManager
,但我没有看到任何方法可以在 WinRT 开发环境中更改(甚至查看)我的 .NET 版本.
我查看了更多内容,发现 StreamSocket
可用于连接 TLS1.2...但这似乎主要用于启用蓝牙通信或与网络端点的通信,但仅按主机名...这对我来说还不够。我需要连接到一个实际的网站,而不仅仅是基础域。
尝试这个,我做了以下:
StreamSocket socket = new StreamSocket();
string serverServiceName = "https";
socket.Control.KeepAlive = false;
url = "inadaydevelopment.com";
HostName serverHost = new HostName(url);
await socket.ConnectAsync(serverHost,serverServiceName,SocketProtectionLevel.Tls12);
text = await ReadDataFromSocket(socket);
如有必要,我可以包含 ReadDataFromSocket()
的代码,但它似乎可以工作,当我将它指向 https://google.com 时按预期从套接字读取数据。但是,我似乎无法弄清楚如何将套接字指向任何有用的东西。 inadaydevelopment.com 的主页不是我想要的;我希望使用托管在该服务器上的 Web API,但似乎找不到方法来做到这一点。
由于 ConnectAsync()
方法的第一个参数只是 HostName
,因此第二个参数 (remoteServiceName
) 必须是连接到我尝试连接的实际 API 或网页的方式连接到。根据 the docs,即 The service name or TCP port number of the remote network destination...
除了 https
和各种数值,我没有看到此参数的任何示例值,这两个值都不会让我进入 API 端点或我尝试连接的网页。
所以,去掉超长的序言,我的问题归结为这个:
是否可以像在 WPF 应用程序中那样在我的 WinRT 应用程序中使用 System.Net.ServicePointManager
?如果是这样,如何?
如果没有,我如何使用 StreamSocket
连接到我想要连接的确切网络服务或网页,而不仅仅是顶级主机?
如果这不可能,我还可以通过什么其他方式使用 TLS1.2 消费网络内容?
预先感谢您的任何帮助或建议。
解决方法
使用 Windows.Web.Http
API 而不是 System.Net.Http
API。
System.Net.Http
不支持 TLS1.2,但 Windows.Web.Http
在 WinRT 应用中支持。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。