.net能否知道客户端是否支持SNI?

时间:2012-11-23 22:53:36

标签: asp.net vb.net ssl azure sni

G'日

我们希望使用SNI在基于云的单一IP解决方案上托管SSL网站。可以.net在TLS握手之前和HTTP上确定客户端是否具有SNI功能吗?

2 个答案:

答案 0 :(得分:0)

在TLS握手之前,“”的含义尚不清楚。

服务器名称扩展名在客户端Hello消息中,这是客户端发起的第一个发起握手的TLS消息。由于HTTPS也始终首先建立TLS连接,因此之前没有任何事情发生。在握手之前知道客户端是否具有SNI能力是不可能的。

您可以使用JavaScript to try to detect SNI support在客户端进行排序。

这就是说,它不太可能解决您的一般问题:如果您在不支持SNI时拥有后备/通配符证书,那么获得其他特定证书几乎没有意义(除了widlcard证书not recommended之外);如果您期望SNI,您将阻止不支持SNI的客户。

答案 1 :(得分:0)

如果您查看维基百科,它会将以下内容列为SNI兼容。

  • Windows Vista或更高版本上的Internet Explorer 7或更高版本。不适用于Windows XP上的任何Internet Explorer版本,因为SNI取决于Windows Vista附带的SChannel系统组件。
  • Mozilla Firefox 2.0或更高版本
  • Opera 8.0(2005)或更高版本(必须启用TLS 1.1协议)
  • Opera Mobile至少版Android 10.1 beta版
  • 谷歌浏览器(Vista或更高版本.XP在Chrome 6或更新版本上。
  • Chrome 5.0.342.1或更高版本上的OS X 10.5.7或更高版本)
  • Safari 3.0或更高版本(Mac OS X 10.5.6或更高版本以及Windows Vista或更高版本)
  • Konqueror / KDE 4.7或更高版本
  • Apple iOS 4.0或更高版本中的MobileSafari
  • Honeycomb上的Android默认浏览器(v3.x)或更新版
  • BlackBerry 10和BlackBerry Tablet OS默认浏览器
  • Windows Phone 7或更高版本
  • Maemo上的MicroB
  • 有关MorphOS的奥德赛

因此,如果您在HTTP中启动连接,则可以检查useragent并检测客户端是否支持SNI,以及是否将其重定向到HTTPS将它们保持在HTTP

在我们的案例中,我们关心的唯一不与SNI兼容的网络浏览器是XP上的IE ...