我正在尝试在我的网站(例如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/

10-10 11:06