【问题标题】:Debian / docker / aspnet core : SSLDebian / docker / aspnet 核心:SSL
【发布时间】:2022-10-06 17:44:09
【问题描述】:

我的 aspnetcore API 和 Linux 环境遇到了一些问题。

我在 docker 容器中为每个项目部署了一个 Angular 项目和 5 个 .net 项目(API 和 Worker 服务),全部由 docker-compose 编排。

我有最后一个 Nginx 容器,并且我成功地使用 \"Letsencrypt\"(docker 映像)认证了我的域,这适用于我的 Angular 项目。

但是,当我尝试从客户端向 aspnetcore API(自签名证书)发出请求时,这根本不起作用。

ISSUE => net::ERR_CERT_AUTHORITY_INVALID

所以,我阅读了很多很多关于这个问题的主题和文章,我发现了最后一篇文章:https://letsencrypt.org/docs/certificates-for-localhost/,解释说,我们不能认证“localhost”,所以我们应该声明我们的自签名证书每个浏览器。

所以我的问题是:我可以为所有想要访问我的网站的每个用户都做一次吗?

可能是aspnetcore 和linux 绝对不兼容(尤其是对于SSL)。

我能做些什么?我现在有点失落了……

  • 你可以发布你的nginx配置吗? (请澄清一下,您只提供来自 nginx 的角度静态文件,或者 api 也通过代理?)
  • 嗨@C1sc0。谢谢你的回复。是的,我只提供角度静态文件。我的 Angular 项目中有一个 environmentApiUrls 文件,存储所有 url。当我发出请求时,我调用这些 url 并将它们传递给 httpClient。
  • 在我尝试在 https 上传递我的网站之前,在 http 上一切正常。但是现在,我的客户端在 https 上,我遇到了一个问题(混合内容:页面是通过 HTTPS 加载的,但请求了一个不安全的 XMLHttpRequest 端点。此请求已被阻止;内容必须通过 HTTPS 提供。),如果我正在尝试请求一个 http 端点。所以我也尝试为我所有的 aspnecore API 获得证书,而且我做得很好。但这是一个自签名证书 => 不起作用。我应该将所有 API 的容器添加到 Ngninx 吗?我现在真的不知道如何处理这个问题..
  • 您也必须通过 nginx 代理与您的 API 的连接,它将处理 TLS 内容,并且在本地连接中,它只是 http(作为上游)并不重要。

标签: angular docker debian lets-encrypt aspnetcore-environment


【解决方案1】:

通过 nginx 代理所有流量并将 API 设置为上游。

示例 nginx 配置(将您已经工作的 TLS 配置添加到此):

worker_processes 1;

events { worker_connections 1024; }

http {

    sendfile on;

    upstream web-api {
        server mydotnetapi:80;
    }

    server {
        listen 80;
        server_name example.com;
        location /symbiosisapi/ {
            proxy_pass         http://web-api/;
            proxy_redirect     off;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header   Upgrade $http_upgrade;
            proxy_set_header   Connection keep-alive;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Proto $scheme;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
        
        
        location / {
            autoindex on;
            root  /home/www-data/mysite;
        } 
    }
}

如果有人点击 / 位置,它将接收静态内容,如果有人点击 /api 位置,请求将被转发到您的 dotnet API。 nginx 将处理所有的 TLS。将 mydotnetapi 更改为您在撰写文件中设置的容器名称。

【讨论】:

  • 比你好多了@C1sc0!我今天会尝试你的解决方案,我会给你一个回来。
  • 嗨@C1sc0!我回来找你消息。 :) 我试过你的解决方案,但我现在找不到 404。我不明白为什么。我只是将容器的 api id 写入您的示例中的流中,然后将其添加到服务器中的某个位置。我准确地说我有一个letsencrypt证书和一个服务器监听443和ssl配置。任何想法?非常感谢你的帮助。
  • 嗨@Raikho 你成功了吗?
  • 我想是的。我给你我的网站的链接,如果你想检查它可能是? symbiosis.ovh
  • 哦好的 !!听起来不错。我中午试试,然后回来找你。谢谢 !
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 2018-07-18
  • 2019-05-03
  • 1970-01-01
相关资源
最近更新 更多