我正在使用HSTS docker镜像作为在docker Linux容器上运行的.net核心3.1Web应用程序的基础,我想添加HSTS头文件,但我没有成功做到这一点。
我尝试的第一件事是遵循https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-3.1&tabs=visual-studio上的微软文档,按照文档中的描述,在Startup.cs文件中使用以下代码添加HSTS头。我尝试通过添加以下内容来设置Startup.cs的ConfigureServices(IServiceCollection服务)方法中的HSTS值:
services.AddHsts(options => {
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(365); });然后调用
app.UseHsts();
app.UseHttpsRedirection();在Startup.cs的Configure(IApplicationBuilder应用程序,IWebHostEnvironment环境)方法中,但它们似乎不能从那里工作。
我想,当在Linux Docker容器中运行时,上面的方法可能不起作用,所以我尝试寻找在Docker容器中设置Strict-Transport-Security头的方法,但我似乎找不出如何在基于3.1-buster-slim的容器中设置正确的值。buster-slim容器报告说它正在使用nginx的一个版本,但它似乎是一个非常精简的版本,并且没有任何关于该图像的文档来说明如何设置HSTS头文件。我曾尝试使用nginx的HSTS文档,但buster-slim镜像似乎没有使用该方法配置HSTS所需的软件。
有没有人知道基于3.1-buster-slim镜像从Docker容器中设置HSTS头的方法,或者有没有说明如何在docker-compose文件中添加HSTS来为基于3.1-buster-slim镜像的容器设置HSTS?
感谢您对解决方案的任何建议。艾伦
我在dotnet-docker github网站上问了这个问题,但被告知要在StackOverflow上发布这个问题。
发布于 2020-10-26 21:16:10
我的问题在这里得到了回答:https://github.com/dotnet/dotnet-docker/issues/2268#issuecomment-714613811 by gsej on github。以下是答案的文本和图像。
这里的问题是,只有当请求是https请求时,添加头的中间件才会添加头(您可以使用类似app.UseHsts()的东西访问它)。事实上,这是有道理的,但如果你在docker容器中运行dotnet核心应用程序,那么你可能会在容器外部终止你的SSL (例如,如果你在Azure AppService中托管容器)。解决方案是添加您自己的小型中间件:
app.Use(async (context, next) => {
 context.Response.Headers.Add("Strict-Transport-Security", "max-age=31536000");
 await next.Invoke();
});https://stackoverflow.com/questions/64146358
复制相似问题