我们的服务器运行的是带有 IIS 1607 的 Windows Server 2016。据我所知,这意味着系统上的 IIS 10 早于版本 1709,其中微软显然在 SITES 元素下添加了 HSTS 元素,从而允许更轻松地设置 HSTS 的机制。
是的,我们很可能在不久的将来将我们的服务器升级到 Windows Sever 2019 或 2022,但目前,我需要考虑 Windows Server 2016 方案。
因此,我找到了以下信息(https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10-version-1709/iis-10-version-1709-hsts) 展示了如何在 1709 之前的 IIS 版本上实现 HSTS。
公平地说,我还没有测试过这些。我可以测试的本地 IIS 是 Windows 10,IIS 版本为 1889 左右,我可以单击一个神奇的复选框,它允许我轻松地从 IIS 管理器中我的站点的“配置”部分下的 HSTS... 链接实现 HSTS。
但是,我不敢触碰我们其他使用 Windows Server 2016 的环境,因为虽然我有管理员权限,但我担心如果进行未经授权的更改,就会造成严重问题。因此,我问了这个问题,这样我才能在破坏任何东西之前了解自己在做什么。
但是,我对上面提到的信息网站的内容感到困惑。我是否必须实施第一个建议的解决方案中建议的所有三个更改(解决方案 1) 还是只有其中一项更改会起作用?
根据信息网站显示:
在 IIS 10.0 版本 1709 之前,在 IIS 服务器上启用 HSTS 需要复杂的配置。
在解决方案 1 下,提到的 web.config 有三个不同的部分。我搞不清楚是只需要其中一个部分还是全部三个部分。
解决方案 1:HTTP 重定向模块 + 自定义标头
<sites>
<site name="Contoso-http" id="1" serverAutoStart="true">
<application path="/" applicationPool="Contoso-http">
<virtualDirectory path="/" physicalPath="C:\inetpub\Contoso-http" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:contoso.com" />
</bindings>
</site>
<site name="Contoso-https" id="2" serverAutoStart="true">
<application path="/" applicationPool="Contoso-https">
<virtualDirectory path="/" physicalPath="C:\inetpub\Contoso-https" />
</application>
<bindings>
<binding protocol="https" bindingInformation="*:443:contoso.com" sslFlags="0" />
</bindings>
</site>
<siteDefaults>
<logFile logFormat="W3C" directory="%SystemDrive%\inetpub\logs\LogFiles" />
<traceFailedRequestsLogging directory="%SystemDrive%\inetpub\logs\FailedReqLogFiles" />
</siteDefaults>
<applicationDefaults applicationPool="DefaultAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
其次是:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpRedirect enabled="true" destination="https://contoso.com" httpResponseStatus="Permanent" />
</system.webServer>
</configuration>
进而:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
我最初的猜测是,是的,确实如此,如果我想使用解决方案 1 使 HSTS 在 1709 之前的 IIS 安装中工作,我确实需要对 web.config 文件实施所有这三个更改。
我看到有一个解决方案 2对于以前的 IIS 安装也是如此,但我对解决方案 1 感兴趣,以便更彻底地了解它。我感到困惑的部分原因是,我看到其他人只通过对自定义标头实施一个配置更改来解决了类似的问题,而没有做其他任何事情。我很好奇这是否就是我需要做的全部。
编辑:关于建议的解决方案(在 IIS 7 中启用 HTTP 严格传输安全 (HSTS)),该问题的答案基本上就是解决方案2。
我问这个问题的原因之一是因为我看到一个系统的变化只使用了解决方案 1 的一部分(仅自定义标题部分),所以我想知道是否有其他人使用过这两种解决方案并有实施经验。
我已经看到 URL Rewrite 模块安装在我的服务器的 IIS 上,所以我认为我会采用解决方案 2,因为它是前面提出的问题的答案,并且看起来比解决方案 1 简单得多。