检测浏览器的 SNI 支持



我想知道是否有任何方法可以找出浏览器是否使HTTP请求支持SNI,而不是验证用户代理和猜测。

我会考虑服务器端或客户端选项。

我想做的是为指向相同PHP应用程序的多个域设置SSL证书。然后,我将尝试找出发出请求的客户机是否支持SNI,如果是,则将其重定向到启用SSL的版本。

首先,我们知道目前支持SNI的浏览器:

歌剧

8.0;MSIE 7.0(但仅适用于Windows Vista或更高版本);Firefox 2.0及其他使用Mozilla Platform rv:1.8.1的浏览器;Safari 3.2.1 (Windows版本在Vista或更高版本上支持SNI);Chrome (Windows版本也支持Vista或更高版本的SNI)。

所以一个便宜的方法是确定浏览器,如果它是上述之一,它有SNI。

虽然这不是最佳实践(优先于特征检测),但似乎没有办法避免它,因为SNI检测需要SSL握手。因此,在SSL证书失效后再做任何事情都太晚了。

最新更新