【发布时间】: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