2012-02-28 159 views
1

我使用的工具称为:来自Helicon技术的ISAPI重写3精简版(“用于IIS的”apache .htaccess mod_rewrite兼容模块“)。ISAPI重写 - “重定向非www版本到www”规则与SSL

我已经应用了“重定向非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时浏览器警告有一个小问题。 假设我想要一个url请求:https://MyDomain.com/abc/login.aspx重定向到:https://www.MyDomain.com/abc/login.aspx 浏览器将显示如下警告:“本网站提供的安全证书是针对不同网站的地址发布的。”这是有道理的,因为我们的SSL证书只适用于“www.MyDomain.com”(而不是“MyDomain.com”)。如果您点击“继续浏览本网站?”它很好地重定向到所需的网址,并且一切都很好。

我的问题:有什么可以做的浏览器SSL证书警告不会出现吗? (最好不用更改SSL证书)。

谢谢。

编辑:

我希望有一些办法让ISAPI重写更改URL,从而使IIS不“看”的要求:“MyDomain.com”,并且只看到修改后的请求为:“www.MyDomain.com”(以便SSL证书警告不会发生)。我认为这可能是一个时间问题。但它看起来像事件的时间是固定的,这样IIS将始终在原始请求的上下文中检查SSL证书?任何人都可以确认吗?

+0

更新我的答案以回应您的编辑。 – 2012-02-28 07:22:18

回答

2

如果您的证书只对https://www.foo.com有效,那么对https://foo.com的请求将始终与该证书不匹配消息一起迎接。

通配符证书通常很贵,但如果您购物一下,您可以找到一个接近正常证书的价格。

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


在回答您的更新:

我希望有一些办法让ISAPI重写更改URL,从而使IIS不“看”的要求:“MYDOMAIN .com“,并且只会将已更改的请求看到:”www.MyDomain.com“(以便不会发生SSL证书警告)。我认为这可能是一个时间问题。但它看起来像事件的时间是固定的,这样IIS将始终在原始请求的上下文中检查SSL证书?任何人都可以确认吗?

这不是一个真正的计时问题。 IIS 已将“查看”该请求以重定向该请求,并且需要在每个请求中显示其身份。当服务器的身份与主机名称不匹配时,需要符合标准的浏览器才能提醒用户(或简单地“挂断”)。

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

如果主机名是可用的,客户必须检查它反对 服务器的身份,以防止人在这方面的中间人攻击的服务器证书消息, 呈现。

[...]

如果主机名不证书中匹配的身份,用户 面向客户必须或者通知用户(客户端可以给用户 有机会继续与任何连接案例)或 终止连接并显示错误的证书错误。