我已经成功地configuration了Windows Server 2008 R2和IIS 7.5,为我的Asp.Net 4应用程序提供服务。 它使用来自hass.de博客文章的信息设置为前向保密。
我仍然有访问低级浏览器,主要是Windows 7与Internet Explorer 8只支持SSL v3.0。
当这些人访问我的网站时,他们看到的只是Internet Explorer cannot display the webpage 。 服务器上没有指示访问者请求失败的指示符,例如没有IIS日志logging事件,没有eventvwr.msc事件id,或者其他任何显示访问者请求的事件/跟踪/debugging都不能被接受。
运行Network Monitor ,我可以看到,当用户与服务器通信时,只有4个数据包在通信:
SYN SYN, ACK SSL 'Client Hello' RST, ACK对“客户端你好” 通讯停止,客户端浏览器显示Internet Explorer cannot display the webpage 。
我已经在BrowserStack中声明了访问者的场景:
问题:有没有办法将IISconfiguration为redirect浏览器请求,该请求不能支持前向保密,因此用户无法获取Internet Explorer cannot display the webpage错误消息?
首先要清理几件事情。
我们正在混合两个不同的概念:协议和密码套件。 SSLv3是协议,前向保密是协商密码套件的一个特征。 select哪个密码套件取决于客户端,服务器和协商的协议。
这意味着您不能依赖协议的版本来决定浏览器是否支持正向保密(这可能会随TLS 1.3而改变)。 SSLv3(至less作为一个规范)确实支持一些前向保密encryption套件,例如SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA (尽pipe实际上我没有看到支持该encryption套件的浏览器)。 这同样说,TLS的一个版本不要求使用前向保密。
Internet Explorer是一个有趣的案例,因为它是受支持的密码依赖于浏览器版本和Windows版本的唯一主要浏览器。 这是因为Internet Explorer将所有的HTTPS协商和处理推迟到称为SChannel的Windows组件。 为了使Internet Explorer支持给定的协议和密码套件,SChannel需要首先支持它。 这使得说什么支持密码套件和协议有点复杂。
有一个版本的IE浏览器支持SSLv3,没有其他的东西,就是Internet Explorer 6.它仍然是唯一的浏览器,有一个使用less许不支持TLS 1.0(这不完全是真的; IE6不支持它,它是只是没有启用默认情况下)。 因此,通过显示错误页面的麻烦,唯一的浏览器是你的目标是Internet Explorer 6.我想其他浏览器可以禁用所有版本的TLS的支持,只留下SSLv3select,但这意味着大部分启用了HTTPS的网站将无法正常工作,因为许多网站已经完全停用了对SSLv3的支持。 在实践中,我不认为你会遇到许多只支持SSLv3的浏览器,而不是IE 6. Windows XP上的IE 8默认使用TLS 1.0,Windows Vista或更高版本的任何版本的IE都支持最less的TLS 1.0。 Windows 8和Windows 7上的Internet Explorer 11支持(写入时)最新的TLS 1.2。
接近你的问题,你的担心是向浏览器想要连接SSLv3的用户显示一个页面。 这有利有弊。 首先,要注意SSLv3有一个叫做POODLE的问题。 POODLE的发现让很多网站彻底closures了SSLv3的支持。
这导致鸡与鸡蛋的问题。 如果您要根据所协商的协议版本redirect用户,则您的Web服务器首先需要支持SSLv3,以检测其存在并提供redirect。 但是这样做,你可能会暴露这些客户不必要的风险。 如果服务器必须接受SSLv3连接才能向用户显示不允许使用SSLv3的页面,则主动攻击者可以利用这个机会来利用SSLv3的弱点。 例如,假设客户端使用TLS 1.0通过HTTPS向您的网站进行身份validation。 IE不支持TLS_FALLBACK_SCSV ,主动攻击者强制浏览器下载到SSLv3。 如果您的站点使用cookie进行身份validation,攻击者现在已经强制浏览器下载到SSLv3(这将为您的错误redirect), 但它可能会显示身份validationcookie。 请记住,一旦用户有他们的身份validationcookie,浏览器发送这些cookie与每个请求。 窃取身份validationCookie是一件大事,在这种情况下使用POODLE是完全可能的。 所以,即使你试图只是一个简单的错误页面,但支持SSLv3存在风险。
所以,你真正的问题。 不, Internet Information Services本身不能redirect基于SSL / TLS版本或密码套件的请求。 有可能是第三方模块,但我不知道。 不过,你有几个select。
您可以卸载连接到一个反向代理,支持redirect基于SSLv3的存在 – 我不知道基于实际的密码套件这样做的方法。 HAProxy是我所知道的 – 可能有其他的我可能不熟悉。 我不会详细说明,但是使用HAProxy,您可以根据SSL版本分配ACL,如下所示:
acl sslv3 ssl_fc_protocol SSLv3
一旦拥有ACL,您可以将其发送到特定的后端,或者按照您的要求进行处理。
其他选项可能会find或开发自己的模块为IIS可以做到这一点。 恕我直言,IIS没有configuration和支持SSL的macros伟支持。 就个人而言,我将SSL卸载到反向代理上,但我知道这不适用于所有人。
你的第三个select是只支持前向保密密码套件,并且至less是TLS 1.0。 使用AES128+EECDH:AES128+EDH密码套件AES128+EECDH:AES128+EDH与TLSv1,TLSv1.1和TLSv1.2将得到您对大多数浏览器的支持。 唯一会被冷落的浏览器是Windows XP上的任何Internet Explorer版本,因为Windows XP不支持任何支持转发保密的合理密码套件。 据我所知,Windows XP只支持DSS与DSS,这是你绝对不想打扰的支持。
后者是我所走的解决scheme。 支持不推荐使用的协议和密码套件会带来一定的风险 – 即使它们只是显示错误页面。