Xamarin Forms - 2022 年如何将 HttpListener 与 HTTPS 结合使用?

问题描述 投票:0回答:1

我已经为此工作了一天左右,并且遇到了很多帖子和片段,它们阐明了如何在 Xamarin Forms 中使用 HTTPListener 运行 HTTPS 服务器,但我遇到的所有内容都非常过时,或者目标平台错误(在大多数情况下,Windows)。我目前仅针对 Android,但希望在共享代码中为服务器执行逻辑,因为我最终也会将该应用程序部署到 iOS。

我的主要问题是找到一份全面的指南,甚至是所需步骤的列表。例如,在 HTTPLIstener 文档页面 (https://learn.microsoft.com/en-us/dotnet/api/system.net.httplistener?view=net-6.0) 上,文本提到需要选择服务器证书对于听众来说,否则就会失败。然后,它继续描述使用 Windows 特定工具配置服务器证书,这些工具在 Xamarin 中没有实现。

我遇到过另一篇文章,其中提到将有问题的证书和私钥放入特定文件夹中,该文件夹以侦听器所在的端口号命名,即 55555.cer 和 55555.pvk。我已经尝试过使用 BouncyCastle 库生成的自签名证书,但它不起作用。服务器的 HTTP 版本工作正常,但 HTTPS 端会生成如下错误:

SSL_ERROR_RX_RECORD_TOO_LONG

这与我在执行除向侦听器添加 HTTPS 前缀之外的任何操作之前收到的错误相同,因此它向我表明,通过将证书放置在正确的位置,没有任何更改或影响。

最后,我遇到的信息让我相信我还需要将自签名证书添加到 Android 受信任证书存储中,然后才能在我的应用程序中使用它。我正要开始实施这一点,但想在这里检查一下是否有人可以提供任何见解来帮助我。

所以我的问题是:在 Xamarin Forms Android 上使具有 HTTPS 支持的 HTTPListener 工作需要哪些实际步骤?

这似乎在过去已经做过,所以想必今天仍然是可能的。由于提供的便利性,我真的很想使用 HTTPListener 而不是较低级别的连接 API。

c# xamarin.forms https xamarin.android httplistener
1个回答
0
投票

请遵循以下说明:

Project 选项控制所有 Web 请求(HttpClient 和 WebRequest)将使用哪些底层 TLS 库。 默认选择 TLS 1.2:

例如:

var client = new HttpClient();

如果 HttpClient 实现设置为 Managed 并且 TLS 实现设置为 Native TLS 1.2+,则 client 对象将自动使用托管 HttpClientHandler 和 TLS 1.2 来处理其 HTTP 请求。

但是,如果 HttpClient 实现设置为 AndroidHttpClient,则所有 HttpClient 对象都将使用底层 Java 类 java.net.URLConnection,并且不受 TLS/SSL 实现值的影响。

控制 SSL/TLS 配置的其他方法

  1. 在项目选项中选择 HttpClient 实现和默认 TLS 库。
  2. 以编程方式使用 Xamarin.Android.Net.AndroidClientHandler。
  3. 声明环境变量(可选)。

在这三种选择中,推荐的方法是使用 Xamarin.Android 项目选项来声明整个应用程序的默认 HttpMessageHandler 和 TLS。

然后,如有必要,以编程方式实例化 Xamarin.Android.Net.AndroidClientHandler 对象声明环境变量

XA_HTTP_CLIENT_HANDLER_TYPE – 此环境变量声明应用程序将使用的默认 HttpMessageHandler

XA_HTTP_CLIENT_HANDLER_TYPE=Xamarin.Android.Net.AndroidClientHandler

XA_TLS_PROVIDER – 此环境变量将声明将使用哪个 TLS 库,btls、legacy 或 default(与省略此变量相同):

XA_TLS_PROVIDER=btls

这个环境变量是通过在项目中添加环境文件来设置的。

环境文件是 Unix 格式的纯文本文件,其构建操作为 AndroidEnvironment:

Android 的 HttpClient 堆栈和 SSL/TLS 实现选择器

Xamarin.Android 环境

传输层安全 (TLS) 1.2

Xamarin.iOS 中的应用程序传输安全

请参阅 BoringSSL 实施

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.