SSL 클라이언트가 서버 이름 표시를 지원하지 않는 경우이를 감지하고이 경우 표준 HTTP 웹 사이트를 제공 할 수 있습니까?


8

SSL SNI를 사용해야하지만 불행히도 최근 Cloudflare 블로그 게시물에서 90 %의 네트워크 만 지원합니다. 클라이언트가 SNI를 지원하고 웹 사이트의 HTTP 버전을 제공 / 리디렉션하는지 (예 : nginx) 어떻게 감지 할 수 있습니까? 이것이 가능한가? SNI를 사용하여 트래픽의 10 %를 잃을 수없는 방법은 무엇입니까? 유효한 인증서없이 HTTPS 트래픽을 HTTP로 리디렉션 할 수 없다고 가정하여이 요청이 불가능하다고 가정하는 것이 맞습니까?

감사합니다.


밀접하게 관련된 질문이 여기에있었습니다 : 브라우저가 SNI를 지원하는 경우에만 SSL로 리디렉션
Simon East

답변:


10

시작할 때 HTTPS를 제공하려면 시작부터 클라이언트가 승인 한 인증서를 제공해야합니다. 그렇지 않으면 클라이언트가 SSL 연결을 수락하지 않으므로 클라이언트를 다른 사이트 나 HTTP 전용 버전으로 리디렉션 할 수 없습니다. 이는이 경우를 지원한다는 의미입니다.

  • SNI 이외의 클라이언트에게 적절한 인증서를 제공 할 수 있도록 모든 도메인을 포함하는 단일 인증서가 있어야합니다. 그러나이 경우 SNI가 전혀 필요하지 않습니다.
  • 또는 대부분의 이름과 일치하지 않는 기본 인증서를 설치해야합니다. 이 경우 클라이언트가이 잘못된 인증서를 수락 한 경우에만 클라이언트에게 다른 페이지를 제공하거나 리디렉션 할 수 있습니다.

시작할 때 HTTPS를 가질 필요가없는 경우, 즉 클라이언트가 보통 일반 HTTP와 먼저 연결하는 경우 나중에 클라이언트를 리디렉션 할 수 있도록 SNI 지원을 감지하려고 시도 할 수 있습니다. HTTPS 사이트에서 이미지, 일부 JavaScript 또는 유사한 항목을 포함하여 수행 할 수 있으며로드가 성공하면 클라이언트가 SNI를 지원하거나 인증서 오류를 무시한다는 것을 알 수 있습니다.

물론 모든 사람이 중간자 공격에 노출 될 수 있습니다. 왜냐하면 모든 사람이해야 할 일은 다른 인증서를 제공하거나 HTTPS를 전혀 사용할 수 없도록하기 때문입니다. HTTPS 로의 연결을 업그레이드합니다. 또한 man-in-the-middle이 대신하는 경우 클라이언트가 SNI를 지원하는 것처럼 보이게하는 데 사용할 수 있습니다. 그리고 SNI가 아닌 클라이언트가 이것의 영향을받을뿐만 아니라 SNI 가능 클라이언트 만 가로 챌 수 있습니다. 따라서 이론 상으로는 이것이 가능하지만 중간에 사람을 배치하여 HTTPS를 사용하는 주요 지점을 만들 수 있기 때문에 권장하지 않습니다.


0

StackOverflow에 게시 한대로 SNI 지원 을 요구 하기 전에 만 테스트 할 수 있습니다 . 즉, 사용자가 SNI HTTPS를 강제로 실행 한 다음이를 지원하지 않으면 대체 할 수 없습니다. 계속 진행할 방법이없이 Windows XP의 Chrome에서 이와 같은 오류가 발생하기 때문입니다.

따라서 (불행히도) 사용자는 실제로 안전하지 않은 HTTP 연결을 시작한 다음 SNI를 지원하는 경우에만 업그레이드해야합니다.

다음을 통해 SNI 지원을 감지 할 수 있습니다.

  1. 원격 스크립트
    일반 HTTP 페이지 <script>에서 대상 SNI HTTPS 서버에서 a 를로드하고 스크립트가 올바르게로드 및 실행되면 브라우저가 SNI를 지원한다는 것을 알고 있습니다.

  2. CORS (Cross-Domain AJAX)
    옵션 1과 유사하게 HTTP 페이지에서 HTTPS로 도메인 간 AJAX 요청을 수행 할 수 있지만 CORS는 브라우저 지원이 제한적 이라는 점에 유의하십시오 .

  3. 사용자 에이전트 스 니프이
    방법은 아마도 가장 신뢰할 수없는 방법이므로이를 지원하지 않는 것으로 알려진 브라우저 (및 운영 체제)의 블랙리스트 또는 알려진 시스템의 화이트리스트를 결정해야합니다.

    Windows XP 이하의 모든 IE, Chrome 및 Opera 버전은 SNI를 지원하지 않습니다. 지원되는 브라우저의 전체 목록은 CanIUse.com을 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.