对于那些使用 ASP.NET MVC 的人。您可以使用以下两种方式在整个站点上通过 HTTPS 强制 SSL/TLS:
艰难的道路
1 - 将 RequireHttpsAttribute 添加到全局过滤器:
GlobalFilters.Filters.Add(new RequireHttpsAttribute());
2 - 强制防伪令牌使用 SSL/TLS:
AntiForgeryConfig.RequireSsl = true;
3 - 通过更改 Web.config 文件要求 Cookie 默认需要 HTTPS:
<system.web>
<httpCookies httpOnlyCookies="true" requireSSL="true" />
</system.web>
4 - 使用 NWebSec.Owin NuGet 包并添加以下代码行以启用整个站点的严格传输安全性。不要忘记在下面添加 Preload 指令并将您的网站提交到HSTS Preload site。更多信息here 和here。请注意,如果您不使用 OWIN,可以在 NWebSec 站点上阅读 Web.config 方法。
// app is your OWIN IAppBuilder app in Startup.cs
app.UseHsts(options => options.MaxAge(days: 30).Preload());
5 - 使用 NWebSec.Owin NuGet 包并添加以下代码行以启用整个站点的公钥固定 (HPKP)。更多信息here 和here。
// app is your OWIN IAppBuilder app in Startup.cs
app.UseHpkp(options => options
.Sha256Pins(
"Base64 encoded SHA-256 hash of your first certificate e.g. cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=",
"Base64 encoded SHA-256 hash of your second backup certificate e.g. M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE=")
.MaxAge(days: 30));
6 - 在使用的任何 URL 中包含 https 方案。 Content Security Policy (CSP) HTTP 标头和Subresource Integrity (SRI) 在某些浏览器中模仿该方案时效果不佳。最好明确说明 HTTPS。例如
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.4/bootstrap.min.js"></script>
简单的方法
使用ASP.NET MVC Boilerplate Visual Studio 项目模板生成一个包含所有这些以及更多内置功能的项目。您还可以在GitHub 上查看代码。