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

Windows runtime 在WinRT应用程序中,如何使用TLS1.2进行连接?,windows-runtime,tls1.2,winrt-async,stream-socket-client,servicepointmanager,Windows Runtime,Tls1.2,Winrt Async,Stream Socket Client,Servicepointmanager,我有一个Windows应用商店应用程序,它是WinRT手机/桌面应用程序(即不是UWP应用程序),目标是Windows 8.1及以上版本 它已经在商店里使用了好几年了,但最近它不再能够使用HTTPS连接各种web API和网站(YouTube,以及我自己的网站) 我也有一个WPF版本的这个应用程序,最近在那个应用程序上也发生了这种情况,为了修复它,我使用了System.Net.ServicePointManager。不幸的是,在我的WinRT环境中,System.Net不包括ServicePoi

我有一个Windows应用商店应用程序,它是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;
在围绕internet进行一些研究时,似乎.NET4.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()
的代码,但当我指向套接字时,它似乎可以按照预期从套接字读取数据。然而,我似乎不知道如何将套接字指向任何有用的东西。inadaydevelopment.com的主页不是我想要的;我希望使用托管在该服务器上的web API,但似乎找不到这样做的方法

由于
ConnectAsync()
方法的第一个参数只是
HostName
,第二个参数(
remoteServiceName
)必须是连接到我尝试连接的实际API或网页的方式。根据,这是
远程网络目标的服务名称或TCP端口号…
除了
https
和各种数字值之外,我还没有看到此参数的任何示例值,这两个值都不能让我连接到试图连接的API端点或网页

因此,由于超长的序言已经结束,我的问题可以归结为以下几点:

我有没有办法像在WPF应用程序中一样在WinRT应用程序中使用
System.Net.ServicePointManager
?如果是,怎么做

如果没有,我如何使用
StreamSocket
连接到我想要连接的确切web服务或网页,而不仅仅是顶级主机

如果这是不可能的,我可以通过什么其他方式使用TLS1.2消费web内容


提前感谢您的帮助或建议。

请使用
Windows.Web.Http
API而不是
System.Net.Http
API


System.Net.Http
不支持TLS1.2,但
Windows.Web.Http
在WinRT应用程序中支持TLS1.2。

谢谢,我来试一试!我终于有机会回到这个项目上来,你的建议奏效了!非常感谢!我对这个问题悬赏了一周,但你的回答来得太晚了。如果我有办法奖励你,让我知道怎么做,我会很高兴为你介绍!=)对于事后出现的其他人,这是我用来查找细节的MS doc页面:当你拿到赏金时,我实际上回答了这个问题,这就是我发现这个问题的原因。非常抱歉,我没有看到它,并且在它过期之前奖励它!事实证明我可以在23小时内重新打开赏金并奖励给你。