【问题标题】:ASP.net core docker https on Azure App Service ContainersAzure 应用服务容器上的 ASP.net 核心 docker https
【发布时间】:2018-07-02 21:09:16
【问题描述】:

如何让 ASP.net 核心在 SSL 上的 docker 中运行,与 Azure App Service for Containers 一起使用?

我让它在 HTTP 上工作,但是当我尝试将它绑定到 SSL 以便 ASP.NET 对 oauth 甚至 swagger 等内容的验证将正常工作时,它无法告诉我“无法配置 HTTPS 端点。不指定了服务器证书,但找不到默认的开发人员证书。” vs.net 生成的仅运行时映像无法运行开发证书,即便如此,这似乎也不安全,并且可能是由于浏览器中的证书错误造成的。

基本上我需要 https 从外部端点一直工作,以便 kestrel 进行加密等,而不是 ngix 或默认情况下在外部代理上运行的任何东西。

这在 vs.net 调试中运行良好,因为它不会出现任何错误,即使绑定到 https 也能正常运行。

遗憾的是,该文档仅处理最基本的用例,并没有概述如何使真正的 https 网站与 aspnet 核心和 Azure 应用容器可靠地工作。

【问题讨论】:

  • 我认为你不应该在 kestrel 上处理 ssl
  • 是的,刚刚找到了隐藏在有关反向代理的文档中的正确方法,然后是钝的支持票。打算用它来回答我自己的问题。谢谢。

标签: c# asp.net azure docker azure-web-app-service


【解决方案1】:

在到处搜索之后,我整理了一堆迟钝的参考资料并提出了解决方案。

Kestrel 将处于 HTTP 模式,但会通过来自反向代理的 ForwardedHeaders 被告知它处于 HTTPS 模式。对于 Azure,您必须使用一个特定的集合。其他人将需要其他选项,并且可能需要额外的设置。本文档将在一般情况下为您提供帮助,但没有 Azure 所需的内容:ASPNet Core Reverse Proxy and Load Balancer Configuration

如果您使用的是 IIS,它只是因为它是内置的,或者您在过去的 Core 版本中添加了 UseIIS。

对于容器或基础 Linux 上的 Azure Web 服务,您需要添加以下 Nuget 包:

Microsoft.AspNetCore.HttpOverrides

在 Startup.cs 中的配置中添加后,您首先需要添加以下内容:

var forwardOptions = new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
    RequireHeaderSymmetry = false
};

forwardOptions.KnownNetworks.Clear();
forwardOptions.KnownProxies.Clear();

app.UseForwardedHeaders(forwardOptions);

请注意,如果没有 KnownNetworks 和 KnownProxies Clear(),它将无法工作。如果没有 RequireHeaderSymmetry = false 它将无法工作,因此您需要所有这些。

在 ForwardedHeaders 上,您需要尝试避免 .All 或列出的其他选项,因为它存在安全漏洞。

然后在应用程序设置中您需要添加WEBSITES_PORT=80ASPNETCORE_URLS=http://+:80ASPNETCORE_HTTPS_PORT=443。在所有这些都出现之前,您将继续得到一个稍微不同的错误。

注意:这不会修复 Swagger 的验证器。它还有其他问题,因为验证器是错误的。 json 仍然有效,但域不同,所以它吓坏了。解决这个问题的简单方法是在 UseSwaggerUi 中设置 options.EnableValidator(null);

  app.UseSwaggerUI(
        options =>
        {
            options.EnableValidator(null);                  
        });

【讨论】:

【解决方案2】:

添加应用设置:

ASPNETCORE_FORWARDEDHEADERS_ENABLED = true

为我解决了这个问题。我有以下 ForwardedHeadersOptions:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
    KnownNetworks = { new IPNetwork(IPAddress.Parse("10.0.0.0"), 8)}
});

来源:https://devblogs.microsoft.com/dotnet/forwarded-headers-middleware-updates-in-net-core-3-0-preview-6/

【讨论】:

    猜你喜欢
    • 2020-12-13
    • 2019-07-01
    • 1970-01-01
    • 2022-06-28
    • 2021-11-30
    • 2019-03-09
    • 2016-08-23
    • 2017-01-30
    • 1970-01-01
    相关资源
    最近更新 更多