9

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

支持 https 的 Httplistener

但我不知道在哪里设置 MonoTouch 中的证书。仅仅添加前缀“https://*:443”并没有帮助,因为没有连接是可能的,也没有抛出异常。

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

我如何在 MonoTouch 中做到这一点?

4

1 回答 1

7

这个问题问得好。在某些情况下,例如 for 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 请求所需的证书和私钥。

于 2012-11-14T19:17:32.633 回答