IIS7redirect最佳实践

我正在寻找IIS7和ASP.net安全站点redirect的“最佳实践”方式。 假设我有两个域名:

  • mydomain.com
  • mydomain.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.configredirect到这样的子页面:

 <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; } 

要强制所有stream量在https://www.mydomain.com上使用HTTPS,您可以简单地使用一个重写规则:

 <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> 

这将redirect所有非HTTPSstream量,而不pipe用于访问该网站的域名https://www.mydomain.com 。 它也会将https://mydomain.comredirect到https://www.mydomain.com 。 由于现在大多数SSL证书都包含有和没有www的域,所以在浏览器中不会导致错误。

上面的redirect规则不能阻止用户访问您的网站,例如https://www.mydomain.net 。 这是因为只有在HTTPS会话build立之后,浏览器才会显示错误,因为域名与证书的通用名称不匹配。 防止这种情况的唯一方法是为域名mydomain.com使用一个单独的IP地址,并为您希望站点可访问的所有其他域名使用单独的IP地址。

要做到这一点,你需要设置你的DNS来让(www.)mydomain.net (以及你希望你的站点可到达的任何其他域名)指向IP地址XXX1 。 此IP地址绑定到IIS中仅HTTP的虚拟站点。 此网站的唯一目的是使用以下重写规则将所有stream量redirect到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> 

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

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