我正在尝试在我的网站(例如www.example.com)上实施HSTS,该网站最近已从http更改为https,并且位于默认端口。我有一个运行在相同域但端口不同的WCF服务(例如www.example.com:8000)。
我尝试做的是在Web.config文件中添加以下代码
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=31536000"/>
</customHeaders>
</httpProtocol>
</system.webServer>
然后,稍后我从here尝试了此代码(因为它说上述实现不正确)
<system.webServer>
<rewrite>
<rules>
<rule name="HTTP to HTTPS redirect" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
redirectType="Permanent" />
</rule>
</rules>
<outboundRules>
<rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security"
pattern=".*" />
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="max-age=31536000" />
</rule>
</outboundRules>
</rewrite>
</system.webServer>
我的网站www.example.com正常运行。但是,一旦我访问www.example.com,响应头Strict-Transport-Security就会被缓存,然后尝试访问WCF服务页面重定向到https,导致“ SSL错误”,因为该服务在8000端口上运行。
注意:清除缓存并访问同一服务页面将显示该页面。
如何停止将在端口8000上进行的呼叫重定向到https?
最佳答案
HSTS不仅适用于端口80上的域,而且还适用于域上的所有HTTP调用。
从rfc:
UA必须用“ https” [RFC2818]替换URI方案,并且
如果URI包含显式端口组件“ 80”,则UA
必须将端口组件转换为“ 443”,或者
如果URI包含不等于的显式端口组件
“ 80”,必须保留端口组件值;除此以外,
如果URI不包含显式端口组件,则UA不得添加一个。
注意:这些步骤确保HSTS策略适用于HSTS主机的任何TCP端口上的HTTP。
因此,您需要执行以下操作之一:
也将您的WCF服务也切换到https。
切换WCF服务的域,使其不受HSTS策略的影响。
停止使用HSTS。
关于c# - 实现HSTS时发生SSL错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33873283/