在 Linux/Ubuntu 中将 HttpListener 绑定到特定端口上的 https

Jef*_*inn 5 c# ubuntu ssl .net-core

我在 .netcore 中创建了一个 HttpListener 来侦听特定端口上的传入请求,我需要将 ssl 证书绑定到 Ubuntu(版本 18.04.2 LTS)上的端口 8202,但不确定如何操作。我的谷歌搜索显示了带有 Apache(或我没有运行的另一个网络服务器)或利用 httpcfg 的虚拟主机,但我没有使用 mono。

我在 Windows 机器上创建了这个应用程序,一旦我使用“netsh http add sslcert”,一切都工作得很好,在 Linux 端,该应用程序在列出 http: 但不是 https: 时工作正常。如果需要的话,我愿意安装 Apache 并设置虚拟主机,但我觉得我错过了一些东西/它过于复杂。下面是侦听器的创建,应用程序的其余部分涉及处理请求/数据,因此不应该相关(尽管会在需要时发布)

                  // start listing on port
            HttpListener listener = new HttpListener();
            string url = "https://serverfqdn:8202/middleman/";
            listener.Prefixes.Add(url);
            try
            {
                listener.Start();
            }
            catch (Exception e)
            {
                Console.WriteLine("bruh i broke");
                Console.WriteLine(e.Message);
            }
Run Code Online (Sandbox Code Playgroud)

现在,当我在 https 上列出的 Ubuntu 框上运行此应用程序并运行测试时,我收到错误:“无法从传输连接读取数据:现有连接被远程主机强制关闭。”

正如之前所说,如果它在 http 上列出,一切正常,我会得到适当的响应。

Mr *_*ery 4

我知道这可能会迟到。但我希望可以帮助其他人。我阅读了几种在 Linux 中运行的 C# 代码上实现/绑定 SSL 的方法。但他们中的大多数人建议创建 SSL 证书,这相当复杂。

下面我分享如何仅使用 Nginx/Apache 设置来重新路由非 ssl http(c# 代码)到https地址来实现此目的。

保持代码非 ssl

server.Prefixes.Add("http://your-host-name.com:11110/");
Run Code Online (Sandbox Code Playgroud)

然后为该地址创建一个 Nginx/Apache 配置(我使用 Nginx):

server {
    listen      11111 ssl http2; #port number for ssl
    server_name  your-host-name:11110;
    
    ssl_certificate "/home/ssl/fullchain.pem";
    ssl_certificate_key "/home/ssl/privkey.pem";
    
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    
    client_max_body_size 128m;
    fastcgi_read_timeout 3000;
    proxy_read_timeout 3000;
    proxy_set_header Forwarded $proxy_add_forwarded;
    proxy_buffering off;
    
    include /etc/nginx/default.d/*.conf;
    
    location / {
        proxy_pass http://your-host-name:11110; #set default route
        proxy_redirect off;
    }
}

Run Code Online (Sandbox Code Playgroud)

此配置适用于 Nginx 服务器。Apache 配置更简单。您可以按照目录000-default.conf中的示例 进行操作/etc/apache2/sites-available