gpt4 book ai didi

ssl - SNI 是否在浏览器中实际使用和支持?

转载 作者:太空宇宙 更新时间:2023-11-03 12:36:55 30 4
gpt4 key购买 nike

我可以找到有关 SNI 的各种信息(请参阅 Wikipedia ),但我找不到有关浏览器实际支持的任何统计信息。

我能找到的最好的结果是它应该可以在带有 SP3 的 Windows XP 上运行。

有谁知道 SNI 是否真的可以在实践中使用?

最佳答案

我可以分享我的经验和方法,将虚拟主机环境(每台服务器多个域)中的一个 IP 证书切换到所有域一个 IP 的负载平衡环境。

我们查看了我们的分析(超过 100 万独立访问者/月),其中大部分是希望在线购买汽车零部件的北美男性用户,并且在 2014 年 3 月 8 日发现,大约 4% 的用户使用 Internet Explorer 使用 Windows XP(其他人是次要的——最坏的情况是 4.5% 的用户会因为不支持 SNI 而受到影响)。请记住,我们无法“控制”这些用户,因此我们无法告诉他们切换浏览器。这个百分比也在迅速下降,至少在美国是这样。

我们首先认为非 SNI 客户与支持 SNI 的客户有一些不同的体验是“可以的”。

我们的方法是检测服务器端(使用 UA 字符串)哪个浏览器/操作系统组合不支持 SNI(正如其他人提到的:Wikipedia article on SNI support)。我们所有的域(约 120 个)都会有一个 A 记录指向一个负载均衡的 IP。我们有一个域的第二个 IP(也是负载平衡的),我们可以称之为 generic-autoparts.com。

所以设置是[我不与我用作以下示例的任何域相关联]:

mikesautoparts.com --> IP X 的域名服务器记录
dansautoparts.com --> IP X 的域名服务器记录
jensautoparts.com --> IP X 的域名服务器记录
... 等等

generic-autoparts.com --> IP Y 的名称服务器记录

如果客户点击 http://www.dansautoparts.com , 并支持 SNI,没有任何 react 。他浏览 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域].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 检查完成后设置一个 session 变量,这样它就不会发生当客户浏览网站时再次。

我们知道,由于 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";
}

关于ssl - SNI 是否在浏览器中实际使用和支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5154596/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com