【问题标题】:How can i make HttpListener to listen on 443 on mac OS?如何让 HttpListener 在 Mac OS 上监听 443?
【发布时间】:2019-06-22 17:09:56
【问题描述】:

我正在建立一个基于 .net 核心中的 HttpListener 的简单服务器,该服务器需要在 MacOS 上运行。在 http 上运行良好,但我需要它在 https 上运行(端口 443。尝试了自定义端口但仍然没有成功)

在 Windows 上,它与“netsh add iplisten”一起使用,并将证书与“netsh add sslcert”绑定。它适用于 http 和 https。

然而,在 Mac OS 上,我发现的第一件事是为 localhost “ifconfig lo0 alias 127.0.0.9 up”设置一个别名,这样我就可以启动 httplistener。

这行得通,每当我向 127.0.0.9 发出 HTTP 请求时,我都会在浏览器中得到硬编码的响应。

Https 仍然不起作用。所以我尝试绑定证书。 我使用 openssl 创建证书 => 获得了 .p12 证书自签名。 使用“httpcfg -add -port 443 -p12 server.p12 -pwd mypassword” 这很有效,因为我可以看到 2 个文件出现在“~/.config/.mono/httplistener/”中,分别称为 443.cer 和 443.pvk。

但是,如果我导航到 https://127.0.0.9,我会在浏览器中收到错误连接重置。

我不知道还能尝试什么,也找不到任何答案。 有人试过在 Mac OS 上这样做吗?

        var ipAddress = "127.0.0.9";
        var httpListener = new HttpListener();

        var httpPrefix = string.Format("http://{0}/", ipAddress);
        var httpsPrefix = string.Format("https://{0}/", ipAddress);

        httpListener.Prefixes.Add(httpPrefix);
        httpListener.Prefixes.Add(httpsPrefix);

        httpListener.Start();
        WaitForNewRequest(httpListener);

在“WaitForNewRequest(httpListener)”方法中,我只写了一个硬编码的“hello world”响应并等待下一个请求。没什么复杂的。

谢谢!

【问题讨论】:

  • 更新:如果我尝试使用“curl -k 127.0.0.9”发出请求,我会得到这个::curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to 127.0.0.9:443"
  • 挖了更多,发现了这个“openssl s_client -connect 127.0.0.9:443 -msg”。它给出 errno 54,它说“write:errno=54 --- 没有可用的对等证书 --- 没有发送客户端证书 CA 名称 --- SSL 握手已读取 0 字节并写入 0 字节 --- 新,(无), 密码为 (NONE) 不支持安全重新协商 压缩:NONE 扩展:NONE 未协商 ALPN SSL-Session:协议:TLSv1.2 ....... 验证返回码:0 (好的)”

标签: c# macos https .net-core httplistener


【解决方案1】:

1024 以下的端口是特权端口,您需要以root 身份运行您的应用才能打开它们。

如果您需要在生产环境中使用443,我强烈建议您使用apachenginx 来监听SSL 端口并将流量代理到您的.net 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-24
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多