我在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编码的证书)和.pvk文件(这是makecert创建的格式的私钥) ),并以端口号作为文件名。

使用这些文件后,您应该能够启动HttpListener并使其加载处理SSL请求所需的证书和私钥。

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

10-12 22:00