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 上列出,一切正常,我会得到适当的响应。
我知道这可能会迟到。但我希望可以帮助其他人。我阅读了几种在 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。
| 归档时间: |
|
| 查看次数: |
2659 次 |
| 最近记录: |