使用 SSL 的 Android HttpListener?

Posted

技术标签:

【中文标题】使用 SSL 的 Android HttpListener?【英文标题】:Android HttpListener using SSL? 【发布时间】:2018-05-28 06:12:21 【问题描述】:

我正在开发一个使用 HttpListener 类托管 Web 服务器的 android 应用。

但我需要使用SSL 证书来托管它,我在某处读到您需要将证书放在 android 设备上的特殊目录中。

但我丢失了指定确切位置的链接。

那么有人知道如何让HTTPSXamarin Android 上使用HttpListener 类吗?

编辑: 按照HttpListener with HTTPS on MonoTouch 中的建议,我已经厌倦了在Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ".mono", "httplistener") 下存储.cer.pvk 文件,但是当我尝试访问该网址时,我没有得到任何答案,如果我更改为http,我至少会得到答案。

我在github上找到了如下源码,https://github.com/mono/mono/blob/3f779475e3fc982e312212d5dbbd86515eddfc0c/mcs/class/System/System.Net/HttpListener.Mono.cs#L73

但它只是吃掉发生的任何异常,因此无法确定是否有任何问题!

【问题讨论】:

HttpListener with HTTPS on MonoTouch的可能重复 @NicolasDusart 纠正我如果我错了,但MonoTouch 是针对 ios 而不是 android。 你有没有设法让它工作? 我放弃了,改用 web socket 服务器。 我最近实现了 HTTPListener 并通过添加防火墙规则允许通过 LAN 进行通信。不需要任何输入,一切都由 C# 代码处理。我在这里分享了解决方案的完整代码:***.com/a/58149405/983548 【参考方案1】:

你没有指出你在调用文件本身,查看 System.Net.HttpListener 的单声道代码,文件本身必须是 port number.cer,即 443.cer,如果你要监听的话443.

string dirname = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string path = Path.Combine(dirname, ".mono");
path = Path.Combine(path, "httplistener");
string cert_file = Path.Combine(path, String.Format("0.cer", port));

https://github.com/mono/mono/blob/3f779475e3fc982e312212d5dbbd86515eddfc0c/mcs/class/System/System.Net/HttpListener.Mono.cs#L64

【讨论】:

以上是关于使用 SSL 的 Android HttpListener?的主要内容,如果未能解决你的问题,请参考以下文章

Android使用SSL自签名证书

Android使用SSL自签名证书

Android使用SSL自签名证书

使用 Android WebViewClient 启用特定 SSL 协议

在 Android 中通过 SSL 使用 WCF 服务

使用 HttpClient 在 Android 中重用 SSL 会话