c# - 在 MonoTouch 上使用 HTTPS 的 HttpListener

标签 c# ios https xamarin.ios httplistener

我使用 MonoTouch 中的 HttpListener 实现了一个非常简单的 Web 服务器。一切正常。现在我需要添加 HTTPS 支持。我尝试按照以下步骤操作

Httplistener with https support

但我不知道在 MonoTouch 中的何处设置证书。仅添加前缀“https://*:443”没有帮助,因为无法建立连接,也不会抛出异常。

根据 http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx ,这可能是因为必须指定服务器证书(“您可以使用 HttpCfg.exe 配置服务器证书和其他监听器选项”)。

如何在 MonoTouch 中实现?

最佳答案

这是一个很好的问题。在某些情况下,例如 HttpListener,.NET 需要工具或 .config 文件(使用 System.Configuration)来调整应用程序的配置。在许多情况下,有些 API 确实实现了相同的目的,但并非总是如此(在这种情况下并非如此)。

解决方案是查看 Mono 的源代码,了解它期望 HttpCfg.exe 工具为应用程序设置什么。来自 github :

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));
if (!File.Exists (cert_file))
    return;
string pvk_file = Path.Combine (path, String.Format ("{0}.pvk", port));
if (!File.Exists (pvk_file))
    return;
cert = new X509Certificate2 (cert_file);
key = PrivateKey.CreateFromFile (pvk_file).RSA;

因此解决方案是创建相同的目录结构(这是可能的,因为它将指向 Documents 目录下)并复制 .cer 文件(二进制 DER 编码certificate)和.pvk文件(makecert创建格式的私钥),文件名为端口号。

有了这些文件,您应该能够启动 HttpListener 并让它加载处理 SSL 请求所需的证书和私钥。

关于c# - 在 MonoTouch 上使用 HTTPS 的 HttpListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13379963/

相关文章:

https - 在 WebDriver 中使用 HTTP 下载文件

c# - 在没有 Json.Net 的情况下反序列化 Json 字符串(在 C# 中)

jquery - 在 jquery ajax 调用 wcf 服务上从 http 移动到 https 时出错

c# - 将关键字等效项从 Java 更新为 C#

ios - 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因 : 'Application tried to present a nil modal view controller on target

ios - 在后台线程上解析来自 WebService 的 JSON 数据

php - 如何快速保护身份验证

c++ - 是否可以使用 HTTPS 证书进行许可?

c# - 未找到monogame内容加载文件异常

C# Windows 窗体 - 在控件外部单击后隐藏控件