AKS+AGIC架构下ASP.Net Core 6.0 WebAPI需实现HSTS吗?有何要求?
HSTS 实现疑问解答
是否需要实现HSTS?
需要。HSTS的核心作用是强制客户端(浏览器、API客户端等)仅通过HTTPS与服务端通信,防范HTTP降级攻击和中间人劫持。虽然你的SSL终止在Azure应用网关,但客户端与网关之间的HTTPS链路是HSTS要保护的核心环节——只要客户端通过HTTPS访问网关,获取到HSTS头后,后续就会自动跳过HTTP尝试,直接用HTTPS请求,从根源上避免HTTP层面的风险。
至于AGIC与后端Pod之间的HTTP通信,属于K8s集群内部流量,不在HSTS的保护范畴内,HSTS规则只作用于外部客户端到入口网关的通信。
实现HSTS的基础设施要求
1. 应用网关需配置可信SSL证书
- 必须使用公共可信CA签发的SSL证书,自签证书无法触发HSTS生效(浏览器会忽略非信任证书对应的HSTS头)
- 证书需覆盖WebAPI对外暴露的所有域名,若计划启用
includeSubDomains选项,还要包含所有相关子域名
2. 在应用网关层面配置HSTS(推荐方案)
由于SSL终止在网关,直接在网关配置HSTS是最优选择——既能统一管理所有后端服务的安全规则,也避免后端服务重复配置:
- 通过Azure门户或Azure CLI进入目标应用网关的配置界面
- 在HTTP设置中启用HSTS,配置关键参数:
max-age:建议设为31536000秒(1年),这是行业通用的最小推荐值,确保HSTS规则能长期生效includeSubDomains(可选):如果需要将HSTS规则应用到当前域名的所有子域名,开启此选项preload(可选):若要将域名加入浏览器的HSTS预加载列表,需满足max-age≥1年、启用includeSubDomains、无HTTP访问入口等条件,需谨慎操作(加入后很难移除)
3. 强制外部访问仅通过HTTPS
- 应用网关必须配置HTTP到HTTPS的自动重定向规则,将所有80端口的请求跳转至443端口——这是HSTS生效的前提,客户端需要先通过HTTPS获取到HSTS头,才能遵循规则
- 禁止将HTTP端口直接暴露到公网,确保外部流量只能通过HTTPS进入
4. 后端WebAPI配置(可选冗余)
如果想在后端也补充HSTS头(作为网关配置的备份),可以在ASP.Net Core 6的Program.cs中添加以下代码:
builder.Services.AddHsts(options => { options.MaxAge = TimeSpan.FromDays(365); options.IncludeSubDomains = true; options.Preload = true; }); // 注意中间件顺序:放在UseRouting之后,UseEndpoints之前 app.UseHsts();
不过需要注意:AGIC默认会透传后端的响应头,但网关层的配置优先级更高,且更易于统一管理,因此优先推荐网关层面配置。
内容的提问来源于stack exchange,提问作者One Developer
相关产品推荐
相关产品推荐

