【问题标题】:HttpListener with HTTPS on MonoTouchMonoTouch 上带有 HTTPS 的 HttpListener
【发布时间】:2012-11-14 13:42:40
【问题描述】:

我使用 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 中做到这一点?

【问题讨论】:

    标签: c# ios https xamarin.ios httplistener


    【解决方案1】:

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

    【讨论】:

    • 为了使其工作,.cer 和 .pvk 文件必须位于 /.config/.mono/httplistener
    • 感谢您发布此信息!我假设你在 MonoTouch 中工作?我正试图让它在 Monodroid 上运行。我不知道如何在正确的位置获取 cert 和 pvk 文件。我将它们添加为“资产”,但这似乎不起作用。 :-(
    • 只是我还是这违背了 HTTPS 的目的,因为从捆绑包或文件系统中简单地下载私钥并不难?
    • @exvance 你有没有想过在哪里存储文件?
    猜你喜欢
    • 2012-07-09
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 2018-11-06
    • 2013-11-12
    相关资源
    最近更新 更多