我有一个 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/