我正在使用一种名为:来自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证书?谁能证实这一点?
答案 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
如果主机名可用,客户端必须检查它 服务器的证书消息中显示的服务器标识, 为了防止中间人攻击。
[...]
如果主机名与证书中的标识不匹配,则为用户 面向客户必须要么通知用户(客户可以给出 用户有机会在任何情况下继续连接)或 使用错误的证书错误终止连接。