UseHsts无法与NetCore 2.1网站一起使用

时间:2018-08-27 21:00:21

标签: c# asp.net-core

我按照Microsoft Documentation上的说明配置UseHst,但是当我访问我的网站时,没有看到Strict-Transport-Security标头。我在配置上尝试了几种变体,但似乎没有任何影响。有什么想法我想念的吗?

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddHsts(options =>
    {
    });

    services.AddHttpsRedirection(options =>
    {
    });            
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseHsts();
    app.UseHttpsRedirection();
    app.UseMvc();
}

这是我在Chrome中获得的标头的图片,但在其他所有浏览器中也是如此。

enter image description here

4 个答案:

答案 0 :(得分:3)

UseHsts排除以下回送主机:

  • localhost:IPv4环回地址。
  • 127.0.0.1:IPv4环回地址。
  • [:: 1]:IPv6环回地址。

您可以尝试发布Web应用程序并检查标题 Strict-Transport-Security

以下是将网站发布到Azure的结果。

enter image description here

答案 1 :(得分:0)

我在ASP.NET Core 2.2应用程序中遇到了相同的问题。 Microsoft Documentation指出,无需在AddHsts()方法中显式设置Max-Age:

  

将Strict-Transport-Security标头的max-age参数明确设置为60天。如果未设置,则默认为30天。有关更多信息,请参见max-age指令。

但是,通过我自己进行设置,我设法将标头添加到了响应中。

在Startup.cs的 ConfigureServices()中:

if (!this.Environment.IsDevelopment())
{
    var currentDate = DateTime.Now;

    services.AddHsts(opt =>
    {
        opt.MaxAge = currentDate.AddYears(1) - currentDate;
        opt.IncludeSubDomains = true;
    });
}

在Startup.cs的 Configure()中:

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.ConfigureExceptionHandler(loggerFactory);
    app.UseHsts();
}

我的托管应用程序中的示例响应标头: enter image description here

注意:我已在我的web.config中明确添加的其他响应标头。

答案 2 :(得分:0)

这可能是相关的,但是我遇到了同样的问题,然后我以错误的顺序使用中间件。此配置启用了响应头:

app.UseForwardedHeaders();
app.UseHsts();

当然,services.AddHsts(...)也很容易错过。

答案 3 :(得分:0)

遇到同样的问题,我从 HstsMiddleWare 测试代码中遇到了 snippet 并发现它很有用

如前面的答案所述,UseHsts 方法排除了环回主机,但您可以通过调用 ExcludedHosts 属性的 Clear 方法来清除此列表

        services.AddHsts(options =>
        {
            options.ExcludedHosts.Clear();
            options.Preload = true;
            options.IncludeSubDomains = true;
            options.MaxAge = TimeSpan.FromDays(60);
        });

注意:这是为了在本地测试 Hsts,但正如 Microsoft 官方文档中提到的,不建议在开发“because the HSTS settings are highly cacheable by browsers”中启用此功能