ProgramingTip

SNI는 실제로 브라우저에서 지원합니까?

bestdevel 2020. 11. 14. 10:56
반응형

SNI는 실제로 브라우저에서 지원합니까?


SNI에 대한 다양한 정보를 박물관 수 있습니다. ( Wikipedia 참조 ) 브라우저에서 실제 지원에 대한 통계는 수 없습니다.

내가 장착 할 수있는 최선의 방법은 Windows XP SP3에서 작동해야한다는 것입니다.

SNI가 실제로 실제로 사용할 수 있는지 아는 사람이 있습니까?


가상 호스팅 환경 (서버 당 여러 도메인)의 인증 서당 하나의 IP에서 사용하는로드 균형 조정으로 전환하는 경험과 접근 방식을 공유 할 수 있습니다.

온라인에서 자동차 부품을 구매하려는 북미 남성 사용자 결과가 대부분인 Analytics (매월 순 방문자 수 100 만 명 이상)를 살펴본 2014 년 3 월 8 일에 약 4 %의 사용자가 Internet Explorer를 사용하는 Windows XP를 사용하고 있음 을 확인했습니다 (나머지는 경미했습니다. 최악의 경우 전체 사용자의 4.5 %가 SNI를 지원하지 영향을받습니다). 다만 사용자에 대한 "제어"권한이 브라우저를 전환하도록 지시 할 수 없습니다. 이 비율은 미국에서 상당히 빠르게 감소하고 있습니다.

우리는 먼저 SNI가 아닌 고객이 SNI를 지원하는 고객과 약간 다른 경험을하는 것이 "OK"라고 결정했습니다.

우리의 접근 방식은 브라우저 / 운영 체제 조합이 SNI를 지원하지 않는 서버 측 (UA 사용 사용)을 감지하는 것이 었습니다 (다른 사람들이 언급했듯이 SNI 지원에 대한 Wikipedia 기사 ). 모든 도메인 (~ 120 개)에는 단일 부하 분산 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 페이지를 색인화하지 실수라고 생각합니다.

각 환경에는 서로 다른 문제와 다른 문제가 있습니다. Google의 경우이 방법이 잘 작동하는 것을 고객이 http://generic-autoparts.com/[ORIGINAL DOMAIN] .com으로 리디렉션되는 '수락'하거나 알지 못합니다 . 또한 generic-autoparts.com을 통해 안심하고 결제하셨습니다.

SNI가 아닌 사용자의 20 %가 리디렉션을 감지하고 수상 쩍은 것처럼 보이며 떠난다 고 가정 해 보겠습니다. 우리의 경우, 사용자의 0.8-0.9 % (2014 년 3 월 8 일 수치 기준)이며 우리는 기꺼이이를 "살고"싶었습니다. 지금은 구체적인 데이터가 없지만 안정적입니다. [2014 년 3 월 28 일 수정 : 고객 100 % 전환 후 매출에 영향을 미치더라도]

구현 업데이트 2014 년 7 월 8 일

서버에서 모든 UA 에이전트는 정적으로 감지하는 것이 불가능합니다. 브라우저의 SNI 기능을 감지하기 위해 다음 JavaScript를 구현했습니다. 일반적인 접근 방식은 SNI가 필요한 도메인에 JSONP 요청을 수행하는 것입니다 (Apache는 "SSLStrictSNIVHostCheck on"을 통해이를 지원함). 시간 초과로 인해 JSONP 요청이 실패하면 고객을 SNI가 아닌 도메인으로 리디렉션합니다.

문제를 복잡하게 만들기 위해 SNI_TEST_DOMAIN이 다운되면 모든 사람을 리디렉션하고 싶지 않습니다. JSONP 요청이 실패하면 (JSONP 실패를 직접 감지 할 수있는 방법이 서버에 초과로) HTTP "상태 확인"요청을 수행하여 서버를 사용할 수 있는지 확인합니다. 또한 모든 페이지로드 에서이 자바 펼쳐보기 코드를 실행하고 싶지는 않습니다. 이로 인해 이상한 시간 제한이 발생하고 많은 고객이 잘못 리디렉션 될 가능성이 있고 세션 변수를 설정하여 발생하지 않습니다. 다시 고객이 사이트를 탐색 할 때.

우리는 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";
}

위키 백과의 문서는 참조 나열 지원되는 브라우저와 서버 버전. 예를 들어 Internet Explorer 7 (XP가 아닌 Vista 이상) 및 Mozilla Firefox 2.0. 모든 방문자가 지원되는 브라우저를 사용하고 있다는 것을 알지 못하는 한 사이트의 SSL 부분에서 차단하지 않고는 SNI (한 IP 주소에 여러 인증서 포함)를 사용할 수 없습니다.


문제는 Windows XP 클라이언트와 Android <3.0 클라이언트입니다. 불행히도 그들은 우리 웹 사이트 방문자의 거의 10 %를 차지합니다. 또한 Blackberry 사용자는 적은 양이지만 유료 고객 중 일부입니다. XP, Blackberry 및 Gingerbread를 결합하면 현재 대부분의 웹 사이트에서 SNI가 허용되지 않습니다 (2015 년 2 월). 이 문제는 약 1 ~ 2 년 후에 줄어들 것으로 예상됩니다.

2016 년 11 월 업데이트 (21 개월 후) : 월 10,000 회 방문으로 상당히 표준 사이트로 이동합니다. 2013 년 1 월 ~ 10 % 비 SNI. 2014 년 1 월 ~ 6 %, 2015 년 1 월 <2 %, 2016 년 1 월 ~ 0.5 %, 2016 년 11 월 ~ 0.1 % (1,000 명 중 1 명). 우리는 2015 년 11 월 / 12 월에 컷 오버를했습니다. 그러나 일부 시장에는 이러한 사용자가 더 많을 수 있습니다. Google Analytics에서 맞춤 잠재 고객을 만들었으므로 그 영향을 쉽게 확인할 수 있습니다. OS 이름으로 정의하면 버전이 시작되며 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을 사용하여 모든 사용자를 지원 해야하는 경우 동적으로 전환해야하지만 대다수가 필요한 경우에는 물론입니다.


나는 이것에 대한 대답에 늦었지만 이런 종류의 해결책에 관심이있는 모든 독자를 위해. 서버 측 기능을 사용하여 브라우저와 OS를 감지하고 방문자에게 "Chrome 또는 Firefox와 같은 온라인 쇼핑을위한 보안 브라우저를 설치 및 사용하고 다운로드 및 설치 링크를 제공"을 사용하도록 지시하십시오.

이것은 고객을 위해 쇼핑을 안전하게 만드는 가장 좋은 방법이며, 하나의 SNI 사용 SSL 사용과 고객의 "쇼핑 보안"이라는 두 가지 목적을 제공합니다. XP의 오래된 브라우저는 SNI 사용 SSL을 사용하는 서버에 관계없이 실제로 안전하지 않기 때문입니다.

XP에서 이전 IE 버전을 사용하는 사용자의 비율이 미국에서는 5 % 미만이고 다른 국가에서는 무시할 수 있거나 0이므로 위험 할 수 있습니다. 사실 다른 나라의 사람들은 오픈 소스 브라우저에 익숙합니다.

내 경험으로는 많은 클라이언트뿐만 아니라 나 자신을 위해 많은 웹 사이트를 호스팅하고 전용 IP없이 SNI 기술을 사용하는 모든 클라이언트에 대해 SSL이 있으며 많은 국가에서 사람들이 크롬이나 파이어 폭스로 전환했다고 확신합니다. 미국에서는 95 %입니다.

부정확 한 정보를 용서해주십시오.


http://caniuse.com/#feat=sni는 현재 SNI가 97.6 %의 브라우저에서 지원된다고 말합니다.


여기에는 UI와 감지 부분의 두 가지 측면이 있다고 생각합니다.

UX

<!--[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 belowWindows XPSNI를 지원하지 않고 켜져있을 가능성이 높은 것은 분명합니다 . 사용자 에이전트를 스푸핑하는 다른 사람은 여기서 중요하지 않습니다.

서버 측

  1. 사용자 에이전트에 대한 스 니프. 단위 테스트가 완료된 후 정규식이 나올 것입니다.
  2. 위의 AJAX 구현을 사용하십시오.

특별 참고

AJAX 솔루션을 사용하면 99 % 방탄 탐지를 제공하지만 몇 가지 웹 개발 원칙을 준수하지 않습니다.

  • 점진적 향상 -모든 사용자에게 동일한 AJAX 요청을 제공합니다. SNI를 지원하는 사용자는 신경 쓰지 마십시오.
  • 레거시 -이 코드를 쉽게 폐기 할 수 없습니다.
  • AJAX 요청에 jQuery를 사용하는 경우 $ .ajaxStop () 메서드에 따라 코드에 영향을 미칠 수 있습니다.

참고 URL : https://stackoverflow.com/questions/5154596/is-sni-actually-used-and-supported-in-browsers

반응형