IIS7 重定向最佳实践

IIS7 重定向最佳实践

我正在寻找使用 IIS7 和 ASP.net 进行安全站点重定向的“最佳实践”方法。假设我有两个域名:

  • 我的域名
  • 我的域名

每个都有一个 www 子域名。

我有一个使用通用名称的 EV 证书:

  • www.mydomain.com

因此,用户可以通过 8 种不同的方式访问该网站:

- http://mydomain.com
- http://mydomain.net
- http://www.mydomain.com
- http://www.mydomain.net
- and also using https://

为了避免用户收到证书错误,必须将用户引导至

 - https://www.mydomain.com

使这项工作对用户透明,同时仍确保 IIS 仅提供安全内容的最佳方法是什么?过去,我曾使用 web.config 重定向到这样的子页面:

<system.webServer>

<httpRedirect destination="https://www.mydomain.com/secureSubPage" />

或者使用通配符证书在公共基页中使用此块:

 if (!Request.IsSecureConnection)
    {
        Response.Redirect(Request.Url.ToString().Replace("http:", "https:"), true);
        return;
    }
    if (!Request.Url.ToString().Contains(".com"))
    {
        Response.Redirect(Request.Url.ToString().Replace(".net", ".com"), true);
        return;
    }

答案1

要强制所有流量使用 HTTPS,https://www.mydomain.com您只需使用一条重写规则:

<rules>
    <rule name="Force HTTPS" enabled="false" stopProcessing="true">
        <match url="(.*)" />
        <conditions logicalGrouping="MatchAny">
            <add input="{HTTPS}" negate="true" pattern="^ON$" />
            <add input="{HTTP_HOST}" negate="true" pattern="^www\.mydomain\.com$" />
        </conditions>
        <action type="Redirect" url="https://www.mydomain.com{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
    </rule>
</rules>

这会将所有非 HTTPS 流量重定向到 ,无论使用哪个域名访问网站https://www.mydomain.com。它还将重定向https://mydomain.comhttps://www.mydomain.com。由于当今大多数 SSL 证书都包含带 www 和不带 www 的域名,因此这不会导致浏览器出现错误。

例如,上述重定向规则无法阻止用户使用 访问您的网站https://www.mydomain.net。这是因为只有在建立 HTTPS 会话后才能检查主机头名称,而在此之前,浏览器会显示错误,因为域名与证书的通用名称不匹配。防止这种情况的唯一方法是为域名使用单独的 IP 地址,mydomain.com并为您希望您的网站可在其下访问的所有其他域名使用单独的 IP 地址。

为此,您需要设置 DNS 以让(www.)mydomain.net(以及您希望您的网站可在其上访问的任何其他域名)指向 IP 地址。此 IP 地址已绑定到 IIS 中的仅 HTTP 虚拟站点。此站点的唯一目的是使用以下重写规则X.X.X.1将所有流量重定向到:https://www.mydomain.com

<rules>
    <rule name="Redirect to https://www.mydomain.com" enabled="false" stopProcessing="true">
        <match url="(.*)" />
        <conditions logicalGrouping="MatchAll">
            <add input="{HTTP_HOST}" negate="true" pattern="^www\.mydomain\.com$" />
        </conditions>
        <action type="Redirect" url="https://www.mydomain.com{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" />
    </rule>
</rules>

然后,您在 IP 地址上为 设置另一个X.X.X.2使用 HTTP 和 HTTPS 的站点(www.)mydomain.com。使用上述重写规则(第一个)强制使用 HTTPS 和www.mydomain.com

除非使用正确的域名,否则此解决方案将有效地使您的网站无法通过 HTTPS 访问mydomain.com,但这也是您想要的,因为您没有其他域名的任何有效证书。

相关内容