windows-runtime - 在 WinRT 应用程序中,如何使用 TLS1.2 进行连接?

标签 windows-runtime tls1.2 winrt-async stream-socket-client servicepointmanager

我有一个 Windows Store 应用程序,它是一个 WinRT 手机/桌面应用程序(即不是 UWP 应用程序),针对 Windows 8.1 及更高版本。
它已经在商店中存在好几年了,但最近它停止能够使用 HTTPS 连接各种 Web 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 ……但这似乎主要是为了启用蓝牙通信或与 Web 端点的通信,但只能通过主机名……这对我来说还不够。我需要连接到一个实际的网站,而不仅仅是基础域。
尝试这个,我做了以下事情:
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 端点或网页。
所以,去掉超长的序言,我的问题归结为这个 :
有没有办法让我使用 System.Net.ServicePointManager在我的 WinRT 应用程序中,就像我在 WPF 应用程序中所做的那样?如果是这样,如何?
如果没有,我该如何使用 StreamSocket连接到我想要连接的确切 Web 服务或网页,而不仅仅是顶级主机?
如果这是不可能的,我可以通过什么其他方式使用 TLS1.2 消费网络内容?
在此先感谢您的任何帮助或建议。

最佳答案

使用 Windows.Web.Http API 而不是 System.Net.Http应用程序接口(interface)。System.Net.Http不支持 TLS1.2 但 Windows.Web.Http在 WinRT 应用程序中。

关于windows-runtime - 在 WinRT 应用程序中,如何使用 TLS1.2 进行连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66788651/

相关文章:

ssl - curl : Unknown error (0x80092012) - The revocation function was unable to check revocation for the certificate

c# - 如何在 WinRT 中同时允许多个弹出窗口?

c++ - 在 Windows 8 Metro 应用程序上同步两个 ppl 任务

c# - Xaml C# 中 Windows 8 商店应用程序的游戏循环

ios - Metro 风格应用程序是否可移植到 iphone 和 ipad 以及 Web 应用程序?

java - HtmlUnit 2.15 可以使用 TLS 而不是 SSL 进行连接吗?

ssl - ECDHE 客户端如何发送Pre Master secret

javascript - 从 Windows 运行时组件调用可移植代码库中的异步方法

javascript - 自定义站点 xxxx.com 使用需要桌面上 IE 消息的附加组件

xaml - 如何创建可变大小的组面板以适合 Windows 8 XAML 中的项目