Server Name Indication
SNI란 한국어로 서버명 지정 이라는 뜻입니다. TLS 프로토콜 확장형이고 랜선을 통하여 tcp 통신을 수행할 시에 핸드세이크 과정을 거치게 되는데, 이때 핸드세이크 과정의 시작점에서 웹브라우저에게 호스트명을 정해줍니다. 이 방식을 통하여 동일서버에서 여러개의 SSL 통신이 가능하게 됩니다.
몇몇 브라우져 및 기기의 접속 제한이 있지만 이를 무시할 수 있을경우 하나의 서버에서
여러사이트의 SSL(https)를 단일 443 포트로 연결할 수 있습니다.
Apache 2.2.12 이상의 버전에서 사용할 수 있는 기능입니다.
SNI 요구사항
1.기본 가상은 SSLServerCert 지시문에 SNI 인수를 지정해야 합니다.
2.단일 주소별(예: "*:443") 가상 호스트만 SNI에 참여할 수 있습니다.
3.이름 기반 가상 호스트의 기본이 아닌 가상 호스트는 SSLServerCert 이외의
이 모듈에서 지시문을 포함할 수 없습니다.
4."invalid"는 예약된 서버 이름입니다.
가상 호스트는 "ServerName invalid"를 지정하지 않아야 합니다.
작동방식
웹서버에 브라우저가 https 접속할시에 SSL/TLS 접속을 하게 되며, 브라우저는 피싱사이트가 아닌 진짜 사이트에 접속된것인지 여부를 알수 있도록 서버에서 SSL 인증서를 가져오게됩니다.
브라우저는 가져온 인증서를 가지고 접속하고자하는 도메인 주소와 인증서의 이름을 비교하게 되며,
만일 이름이 일치하면 보안접속이 이루어 지게됩니다. 아닐경우 경고 메시지를 불러옵니다.
보통 하나의 서버에 여러개의 도메인을 서비스 하므로, ip만 가지고 이를 판단하게 되면 서버상의 하나의 도메인만 SSL 통신이 가능하게 되므로 SNI를 사용합니다.
즉 하나의 서버상에 여러 도메인을 서비스 하는경우 SNI가 있다면 SSL 통신이 가능해 집니다
예시)
Apache 2.4.6 버전에서 SNI를 알아보겠습니다.
도메인 https://nctest1.zz.am 안전함으로 SSL 적용되어 있는 걸 확인할 수 있습니다.
도메인 https://nctest2.zz.am 안전하지 않음으로 SSL 적용되지 않은 걸 확인할 수 있습니다.
도메인 https://nctest2.zz.am 에 SSL 적용 후 Httpd.conf의 파일을 확인해 보겠습니다.
httpd-le-ssl-conf 파일에 Include된 것을 활인할 수 있습니다.
vim명령어로 /etc/httpd/conf/httpd-le-ssl.conf 파일을 확인해보면 443포트의 가상 호스트 설정이 자동으로 적용된 것을 확인 할 수 있습니다.
두 서버의 도메인을 접속해보면 SSL이 적용된 것을 확인할 수 있습니다.
[출처] SNI란 무엇인가?|작성자 엔클라우드24
SNI란 무엇인가?
SNI는 Server Name Indication의 약어로 한국어로 풀어내면 서버 이름 지정이란 뜻입니다. TLS 프로토콜의 확장형 중 하나로 하나의 웹서버가 여러 웹사이트를 서비스하면서 인증서 인증에 관련된 문제가 발생하여 이를 해결하기 위해 나온 것입니다.
예전에는 하나의 서버 IP 주소와 도메인이 1:1로 매칭되어있다 보니 서버 인증서 제공에 대한 문제점이 없었습니다. 하지만 최근에는 여러 도메인을 하나의 IP 주소와 서버로 연결하는 서비스가 대중화되다 보니, 보낼 인증서를 특정하지 못하는 문제점이 발생하게 되었습니다.
이를 해결하기 위해서 TCP 통신 과정 중 핸드 셰이크(HandShake, 주고받기) 과정의 시작점에 서 웹브라우저에 호스트 명을 정해주어 하나의 서버에서 여러 개의 SSL 통신을 할 수 있도록 변경한 것입니다.
HTTPS/SSL 통신은 보안통신인데..
어떻게 감청해서 막는 거야?
HTTPS/SSL 인증 후 사용자와 웹 서버 사이의 통신은 암호화되어있습니다. 하지만 인증 과정에서 발생하는 통신은 암호화되지 않은 채 진행되고 있습니다. 즉, TLS 인증 과정 중 핸드 셰이크 시 처음 발생하는 패킷을 ISP에서 확인하고 차단 대상 사이트 DB와 일치한 접근이면 차단하여 막는 형태입니다.
요기서 한 가지 집고 넘어가야 될 점은.. 많은 분들이 모든 통신이 감청당한다고 생각하는 경우가 많습니다. 하지만 기술적으로는 어떠한 사이트에 대해서 접근하려고 하는지에 대해서만 알 수 있을 뿐, 실제 사용자와 웹 서버 간의 통신은 암호화되어있기 때문에 어떠한 데이터를 주고받았는지에 대해서는 알 수 없습니다.
그리고 암호화되지 않은 SNI 인증 과정 역시 암호화하기 위해, DNS 통신 단계에서부터 암호화하는 Encrypted Server Name Indication, ESNI가 TLS1.3의 확장 기능으로 발표되었으며, 클라우드 플레어(Cloudflare)에서 시범 서비스되고 있습니다. 그리고 향후 차세대 표준으로 등재될 예정으로 장기적으로는 사용자가 어떠한 사이트에 접근하려고 하는지도 암호화되어 확인할 수 없게 될 예정입니다.
왜 감청하는 거야?
그리고 무엇이 문제야?
이유는 매우 심플합니다. 우리 사회에서 막대한 피해를 일으키고 있는 암적인 존재들인 불법 공유 · 도박 · 리벤지 포르노 배포를 하고 있는 유해 사이트들 차단하기 위해서 하고 있습니다. (관련 보도자료 1 / 보도자료 2)
VOD나 웹툰 서비스와 달리 저작권을 무시하고 유료 콘텐츠를 무료 배포하여 콘텐츠 생산자에게 피해를 입히는 불법 공유 사이트, 자극적이고 제한 없는 사행성 도박을 통해서 막대한 피해를 일으키고 있는 도박 사이트, 당사자의 동의 또는 인지 없이 촬영 및 배포되어 수많은 피해자를 발생시키고 있는 리벤지 포르노 배포 사이트, 이들은 분명히 사회적 암이고 없어져야 될 존재입니다.
취지 자체는 매우 좋습니다. 정말 좋아요.
하지만 이를 시행하는 방법이 잘못되었습니다.
HTTPS는 서버와 사용자의 통신이 암호화되어있기 때문에 어디로 접속하는지 알 수 없습니다. 즉, 어디와 어떠한 통신이 이루어지고 있는지에 대해서 알 수 없기 때문에 차단하지 못한다는 것입니다. 이러한 부분을 해결하기 위해서 보안상 취약점인 사용자와 서버가 통신하기 전 암호화되어있지 않은 보안 인증 과정을 확인해서 어떠한 사이트로 접속하려고 하는 것인지 파악해서 차단한다는 것입니다.
즉, 간단하게 비유해서 치킨을 시켜 먹고 싶어서 치킨집에 전화해서 "거기 OO 치킨집이죠?" 하고 확인하는 과정을 듣고 "어 거기 맛없어"하고 강제로 전화를 끊어버린다는 겁니다.
분명히 누가 어디에 간다는 개인의 사생활 영역입니다. 고로 개인이 어떠한 사이트를 이용하는지도 사생활의 영역이고, 이를 보호하기 위해서 암호화를 진행합니다. 하지만 이번 SNI 필드 감청을 통한 차단 방식은 개인의 사생활 영역을 무시하고 보안의 허점을 이용해 확인하고 차단한다는 것입니다.
출처 : https://brunch.co.kr/@searphiel9/46
'⚡네트워크 > 네트워크 기초' 카테고리의 다른 글
[Network] 인라인 모드(In-line mode)와 미러링(Mirroring) 모드의 개념과 차이점 (0) | 2019.03.17 |
---|