【问题标题】:Can .net know if client is SNI capable over HTTP?.net 可以知道客户端是否支持 HTTP 上的 SNI?
【发布时间】:2012-11-23 22:53:35
【问题描述】:

节日,

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

【问题讨论】:

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


    【解决方案1】:

    不清楚您所说的“TLS 握手之前”是什么意思。

    服务器名称扩展位于客户端问候消息中,这是客户端发送的第一条用于启动握手的 TLS 消息。由于 HTTPS 也总是首先建立 TLS 连接,因此之前根本没有发生任何事情。在握手之前知道客户端是否支持 SNI 是不可能的。

    您也许可以在客户端使用JavaScript to try to detect SNI support 解决问题。

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

    【讨论】:

    • 您链接的 JavaScript 解决方案看起来也很有趣。您可能有一个用户最初登陆的“浏览器功能”检测页面,然后被重定向到他们浏览器的适当域。我不确定如果该网站有很多入口点,但有趣的概念仍然如此,那将有多好。
    • @dana - 我们已经通过使用 asp.net 中的用户代理标头并将其与兼容浏览器列表进行比较来解决问题。
    • @dana,这个 JS 技巧对于制作浏览器统计信息或在用户访问网站之前向用户发送好消息很有用。但是,这不会使站点支持 SNI。如果您的站点既可以通过 SNI 访问,也可以通过 SNI 访问,则不需要 SNI 支持。 timmah.faase,因为用户代理标头只有在成功握手后才能访问,所以不清楚这如何解决您自己的问题。
    • 因为与客户端的会话总是通过 HTTP 启动的。
    • @timmah.faase。尽管如此,如果客户端不支持 SNI,您将无法使用与其他站点不同的证书在同一 IP 地址/端口上为该站点提供服务,因此您需要一个备用解决方案(例如多SAN、通配符证书或其他 IP 地址),这会使 SNI 解决方案变得多余。
    【解决方案2】:

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

    • Internet Explorer 7 或更高版本,在 Windows Vista 或更高版本上。不在 Windows XP 上的任何 Internet Explorer 版本中,因为 SNI 依赖于 Windows Vista 附带的 SChannel 系统组件。
    • Mozilla Firefox 2.0 或更高版本
    • Opera 8.0 (2005) 或更高版本(必须启用 TLS 1.1 协议)
    • Android 上的 Opera Mobile 至少 10.1 测试版
    • Google Chrome(Vista 或更高版本。Chrome 6 或更高版本上的 XP。
    • 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 (v3.x) 或更新版本上的 Android 默认浏览器
    • BlackBerry 10 和 BlackBerry Tablet OS 默认浏览器
    • Windows Phone 7 或更高版本
    • Maemo 上的 MicroB
    • MorphOS 上的奥德赛

    因此,如果您在HTTP 中启动连接,那么您可以检查useragent 并检测客户端是否支持SNI,如果他们确实将它们重定向到HTTPS,如果不继续使用HTTP

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

    【讨论】:

      猜你喜欢
      • 2020-06-21
      • 2017-09-08
      • 2011-12-19
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      相关资源
      最近更新 更多