ISAPI重写 - 使用SSL将“非www版本重定向到www”规则

时间:2012-02-28 03:59:02

标签: iis url-rewriting isapi-rewrite

我正在使用一种名为:来自Helicon Tech的ISAPI Rewrite 3 Lite(一种用于IIS的“apache .htaccess mod_rewrite兼容模块”)。

我已将“将非www版重定向到www”规则(来自:http://www.helicontech.com/isapi_rewrite/doc/examples.htm#hotlinking)。即:

RewriteEngine on

RewriteCond %{HTTPS} (on)?
RewriteCond %{HTTP:Host} ^(?!www\.)(.+)$ [NC]
RewriteCond %{REQUEST_URI} (.+)
RewriteRule .? http(?%1s)://www.%2%3 [R=301,L]

这样可行,但与SSL一起使用时,浏览器警告有点问题。 假设我想要一个网址请求,例如:https://MyDomain.com/abc/login.aspx被重定向到:https://www.MyDomain.com/abc/login.aspx 浏览器将显示如下警告:“本网站提供的安全证书是针对不同网站的地址发布的。”这是有道理的,因为我们的SSL证书仅适用于“www.MyDomain.com”(而非“MyDomain.com”)。如果您点击“继续浏览此网站?”它重定向到所需的URL,一切都很好。

我的问题:是否可以采取措施使浏览器SSL证书警告不会出现? (最好不必更改SSL证书)。

感谢。

编辑:

我希望有一些方法可以让ISAPI Rewrite更改url,这样IIS就不会“看到”请求:“MyDomain.com”,只会看到更改后的请求:“www.MyDomain .com“(以便不会发生SSL证书警告)。我认为这可能是一个时间问题。但看起来事件的时间安排是固定的,因此IIS将始终在原始请求的上下文中检查SSL证书?谁能证实这一点?

1 个答案:

答案 0 :(得分:2)

如果您的证书仅对https://www.foo.com有效,那么https://foo.com的请求将始终受到该证书不匹配消息的欢迎。

通配符证书通常很昂贵,但如果你购买一点,你可以找到一个接近普通证书的价格。

显而易见的解决方案是,如果要在https://foo.com子域上进行所有活动,则不会向www发送流量。毕竟,您可以通过向https://xyz.foo.com发送流量来获得相同的消息,但这不是问题,因为没有理由在那里发送流量。同样,可能没有理由向https://foo.com发送流量。


响应您的更新:

  

我希望有一些方法可以让ISAPI Rewrite更改url,这样IIS就不会“看到”请求:“MyDomain.com”,只会看到更改后的请求:“www.MyDomain .com“(以便不会发生SSL证书警告)。我认为这可能是一个时间问题。但看起来事件的时间安排是固定的,因此IIS将始终在原始请求的上下文中检查SSL证书?谁能证实这一点?

这不是一个时间问题。 IIS “看到”请求以重定向它,并且需要在每个请求上显示其标识。当服务器的标识与主机名不匹配时,需要符合标准的浏览器提醒用户(或简单地“挂断”)。

http://tools.ietf.org/html/rfc2818#section-3.1

  

如果主机名可用,客户端必须检查它      服务器的证书消息中显示的服务器标识,      为了防止中间人攻击。

     

[...]

     

如果主机名与证书中的标识不匹配,则为用户      面向客户必须要么通知用户(客户可以给出      用户有机会在任何情况下继续连接)或      使用错误的证书错误终止连接。