Alj*_*vic 66 ssl cross-browser sni
我可以找到有关SNI的各种信息(参见维基百科),但我找不到任何有关浏览器实际支持的统计信息.
我能找到的最好的是它应该适用于带有SP3的Windows XP.
有谁知道SNI是否真的可以在实践中使用?
ron*_*eth 90
我可以分享我的经验和方法,从虚拟主机环境中的每个IP证书(每个服务器多个域)切换到负载平衡环境,所有域都有一个IP.
我们查看了我们的分析(每月超过100万独立访问者),其中大多数是希望在线购买汽车零件的北美男性用户,并且在2014年3月8日发现大约4%的用户使用Internet Explorer在Windows XP上(其他是次要的 - 最坏的情况4.5%的用户会受到不支持SNI的影响.请记住,我们对这些用户没有"控制权",因此我们无法告诉他们切换浏览器.至少在美国,这个百分比也相当快地下降.
我们首先认为,非SNI客户与支持SNI的客户有一些不同的体验.
我们的方法是检测服务器端(使用UA字符串)哪个浏览器/操作系统组合不支持SNI(正如其他人提到的:维基百科关于SNI支持的文章).我们所有的域(~120)都有一个指向单个负载均衡IP的A记录.对于我们可以称为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%的nonSNI用户注意到重定向,看起来很可疑,他们就离开了.在我们的案例中,这是用户的0.8-0.9%(基于2014年3月8日的数字),我们愿意"活着".我目前没有具体的数据,但整体销售保持稳定.[编辑2014年3月28日:在我们切换100%的客户后,我们看到销售没有受到影响]
实施更新2014年7月8日
事实证明,在服务器上静态检测每个UA代理字符串是不可能的.我们实现了以下JavaScript来检测浏览器的SNI功能.一般方法是针对需要SNI的域执行JSONP请求(Apache通过"SSLStrictSNIVHostCheck on"支持此功能).如果JSONP请求因超时而失败,我们会将客户重定向到nonSNI域.
更复杂的是,我们不希望仅因为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"
});
}
Run Code Online (Sandbox Code Playgroud)
snitest.php/sni_healthcheck.php:
<?php
if (array_key_exists('callback', $_GET))
{
header( 'Content-type: application/javascript' );
echo "{$_GET['callback']}();\n";
}
Run Code Online (Sandbox Code Playgroud)
小智 19
您引用的Wikipedia文章列出了支持的浏览器和服务器版本.例如,Internet Explorer 7(Vista或更高版本,而不是XP)或更高版本以及Mozilla Firefox 2.0.除非您知道所有访问者都使用支持的浏览器,否则您无法使用SNI(在一个IP地址上使用多个证书),而无需将其从网站的SSL部分中删除.
问题是Windows XP客户端和Android <3.0客户端.不幸的是,他们仍然是我们许多网站访客的近10%.此外,虽然黑莓用户数量较少,但他们是我们付费的一些客户.XP,Blackberry和Gingerbread结合使得SNI目前在大多数网站都不被接受(2015年2月).我预计这个问题会在一两年后减少.
2016年11月更新(21个月后):进入一个相当标准的网站,每月访问量约为10,000次.2013年1月〜非SNI 10%.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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34586 次 |
| 最近记录: |