我可以找到有关 SNI 的各种信息(请参阅Wikipedia),但我找不到有关浏览器实际支持的任何统计数据。
我能找到的最好的结果是它应该可以在带有 SP3 的 Windows XP 上运行。
有谁知道 SNI 是否真的可以在实践中使用?
我可以找到有关 SNI 的各种信息(请参阅Wikipedia),但我找不到有关浏览器实际支持的任何统计数据。
我能找到的最好的结果是它应该可以在带有 SP3 的 Windows XP 上运行。
有谁知道 SNI 是否真的可以在实践中使用?
我可以分享我的经验和方法,将虚拟主机环境(每台服务器多个域)中的每个 IP 证书切换到所有域一个 IP 的负载平衡环境。
我们查看了我们的分析(每月超过 100 万的独立访问者),主要是希望在线购买汽车零部件的北美男性用户,并发现在 2014 年 3 月 8 日,大约 4% 的用户在 Windows XP 上使用 Internet Explorer(其他是次要的——最坏的情况下,不支持 SNI 会影响总用户的 4.5%)。请记住,我们无法“控制”这些用户,因此我们无法告诉他们切换浏览器。这个百分比也在迅速下降,至少在美国是这样。
我们首先认为非 SNI 客户与支持 SNI 的客户有一些不同的体验是“可以的”。
我们的方法是检测服务器端(使用 UA 字符串)哪个浏览器/操作系统组合不支持 SNI(正如其他人提到的:关于 SNI 支持的维基百科文章)。我们所有的域(约 120 个)都会有一条 A 记录指向一个负载均衡的 IP。我们为一个可以称为 generic-autoparts.com 的域提供了第二个 IP(也是负载平衡的)。
所以设置是[我没有与我使用的任何域相关联,如下例所示]:
mikesautoparts.com --> IP X dansautoparts.com 的域名
服务器记录 --> IP X jensautoparts.com 的域名服务器记录--> IP X
的域名服务器记录
...等
generic-autoparts.com --> IP Y 的名称服务器记录
如果客户点击http://www.dansautoparts.com并支持 SNI,则没有任何反应。他浏览 dansautoparts.com,到结账时,他使用https://www.dansautoparts.com。
如果客户点击http://www.dansautoparts.com,我们检测到他不支持 SNI,我们会立即将客户重定向到http://generic-autoparts.com/dansautoparts.com。他在那里购物,并在结账时使用https://generic-autoparts.com/dansautoparts.com
现在,如果客户直接点击https://www.dansautoparts.com(电子邮件中的链接,搜索引擎中的索引页面),那么您就不走运了。他们会得到一个令人讨厌的证书错误。在我们的案例中,我们确保我们的系统发送的所有电子邮件都没有使用 https,并且我们知道搜索引擎没有索引我们的 https 页面。
每种环境都有不同的挑战和潜在的权衡取舍。我们发现这在我们的案例中效果很好,客户会“接受”(或不注意到)被重定向到http://generic-autoparts.com/[ORIGINAL DOMAIN].com 。我们还通过 generic-autoparts.com 确保结账安全。
假设 20% 的非 SNI 用户注意到重定向,看起来很可疑,然后他们离开了。在我们的例子中,这是 0.8 - 0.9 %(基于 2014 年 3 月 8 日的数字)的用户,我们愿意“忍受”这一点。我现在没有这方面的具体数据,但整体销售保持稳定。[编辑 2014 年 3 月 28 日:在我们转换 100% 的客户后,我们没有看到对销售的影响]
实施更新 2014 年 7 月 8 日
事实证明,在服务器上静态检测每个 UA 代理字符串是不可能的。我们实现了以下 JavaScript 来检测浏览器的 SNI 功能。一般的方法是对需要 SNI 的域执行 JSONP 请求(Apache 通过“SSLStrictSNIVHostCheck on”支持这一点)。如果 JSONP 请求因超时而失败,我们会将客户重定向到非 SNI 域。
更复杂的是,我们不想仅仅因为 SNI_TEST_DOMAIN 关闭就重定向每个人。如果 JSONP 请求失败(由于无法直接检测 JSONP 失败而超时),我们会通过执行 HTTP“健康检查”请求来验证服务器是否可用。此外,我们不想在每次页面加载时都运行这个 javascript 代码,因为这会增加一些奇怪的超时和错误重定向许多客户的机会,所以我们在 SNI 检查完成后设置一个会话变量,这样就不会发生再次在客户浏览网站时。
我们知道,由于 JSONP 超时不可靠,我们会收到某些失败的错误检查,但自从实施此操作后,我们没有收到客户的任何投诉。
var redirect='http://REPLACE_WITH_NON_SNI_URL';
var sni_https_timeout, sni_http_timeout;
var https_req = $.ajax({
url : 'https://SNI_TEST_DOMAIN.com/snitest.php',
dataType : "jsonp",
}).done(function() {
window.clearTimeout(sni_https_timeout);
var request = $.ajax({
url: "index.php?ua=sni_check_done",
type: "POST"
});
})
sni_https_timeout = window.setTimeout(function() {
var http_req = $.ajax({
url : 'http://SNI_TEST_DOMAIN/sni_healthcheck.php',
dataType : "jsonp"
}).done(function()
{
window.clearTimeout(sni_http_timeout);
window.setTimeout(function()
{
window.location = redirect;
},
200);
});
sni_http_timeout = window.setTimeout(function() { sni_http_fail(); }, 8000);
}, 8000);
function sni_http_fail() {
var request = $.ajax({
url: "index.php?ua=sni_check_done",
type: "POST"
});
}
snitest.php / sni_healthcheck.php:
<?php
if (array_key_exists('callback', $_GET))
{
header( 'Content-type: application/javascript' );
echo "{$_GET['callback']}();\n";
}
您引用的Wikipedia 文章列出了支持的浏览器和服务器版本。例如,Internet Explorer 7(Vista 或更高版本,而不是 XP)或更高版本以及 Mozilla Firefox 2.0。除非您知道所有访问者都在使用受支持的浏览器,否则您无法使用 SNI(在一个 IP 地址上具有多个证书)而不将它们与您网站的 SSL 部分断开。
问题是 Windows XP 客户端和 Android < 3.0 客户端。不幸的是,他们仍然是我们许多网站访问者的近 10%。此外,虽然黑莓用户数量较少,但他们是我们的一些付费客户。目前(2015 年 2 月),XP、Blackberry 和 Gingerbread 的组合使我们的大多数网站都无法接受 SNI。我预计这个问题会在一两年内减少。
2016 年 11 月更新(21 个月后):进入一个相当标准的网站,访问量约为 10,000 次/月。2013 年 1 月 ~10% 非 SNI。2014 年 1 月 ~6%,2015 年 1 月 <2%,2016 年 1 月 ~0.5%,2016 年 11 月 ~0.1%(千分之一)。我们在 2015 年 11 月/12 月进行了切换。但是,某些市场可能有更多的此类用户。我在 Google Analytics 中创建了自定义受众,因此很容易看到影响。只需定义操作系统名称,版本开头,对于XP,浏览器是IE。
Windows XP 上的 Internet Explorer(所有版本;6、7 和 8)不支持 SNI。所有其他的工作。我真的不知道 XP 上有多少用户使用 Internet Explorer,但这是无法使用 SNI 的神奇用户数。
移动支持:
Android default browser on Honeycomb or newer
Windows Phone 7
MobileSafari in Apple iOS 4.0 or later
您将无法通过 SNI 支持来自 XP 的 SSL 连接。但是,允许 XP 客户端连接无论如何都不符合某些标准,因此您可能出于其他原因不得不删除这些用户。
它们在 2016 年仅占百分之几,而且还在下降。如果您必须使用 SSL 支持每个用户,那么您将需要动态切换,但如果您只需要绝大多数......当然。
我回答这个问题很晚,但对于所有可能对这种解决方案感兴趣的读者来说。只需使用服务器端功能检测浏览器和操作系统,并告诉访问者使用“安装和使用安全浏览器进行在线购物,如 Chrome 或 Firefox,并提供下载和安装链接”。
这是确保客户购物安全的最佳方式,它有两个目的,一个是启用 SNI 的 SSL 使用,另一个是确保客户的“购物安全”。因为无论服务器是否使用启用 SNI 的 SSL,XP 上那些过时的浏览器确实不安全。
我们可以冒这个风险,因为在美国,在 XP 上使用旧 IE 版本的用户比例低于 5%,而在其他国家/地区则可以忽略不计或为零。事实上,其他国家的人们已经习惯了开源浏览器。
我自己的经验,我为自己和许多客户托管了许多网站,并且我为所有这些网站使用 SNI 技术而没有专用 IP,我很确定人们已经转向 chrome 或 firefox 在许多国家,几乎所有人在美国,95%。
请原谅我的任何不准确的信息。
http://caniuse.com/#feat=sni目前表示 97.6% 的浏览器都支持 SNI。
我认为这有两个方面,UI和检测部分。
用户体验
<!--[if lt IE 7]>
<div>You're using a browser that has high security risks (SSL, XSS, etc). Please consider upgrading it.</div>
<![endif]-->
很明显,任何使用的人IE6 or below
都有很高的机会启用Windows XP
并且不支持 SNI。其他欺骗他们的用户代理的人在这里无关紧要。
服务器端
特别说明
使用 AJAX 解决方案可为您提供 99% 的防弹检测,但不符合一些 Web 开发原则。