파이어폭스에서 ESNI을 통해 인터넷을 안전하고 자유롭게 사용하기
최근 정부의 저작권 및 성인물 단속으로 인하여 우리나라에서는 기존에 하던 HTTP 패킷 검열에 더불어 최근에 HTTPS 검열을 실시하게 되었다. HTTPS는 보내고 받는 패킷을 TLS로 암호화하기 때문에 제 3자가 내용을 확인할 수 없지만 유일하게 사용자가 요청하는 도메인 주소는 암호화가 되지 않고 평문으로 전송된다.
리눅스, 윈도우 리눅스 등에서 DNS와의 통신을 암호화하는 기술(DNS over HTTPS)를 적용할 수 있지만, DNS와의 통신이 암호화될 뿐, 서버와 공개키를 공유하기 전에 서버가 도메인의 이름을 알 필요가 있어야 하기 때문에 서버와는 요청하는 도메인을 그대로 평문으로 주고 받게 된다.1왜냐하면 DNS가 도메인을 보고 연결해주는 서버와 도메인 주소는 1:1 대응이 아니기 때문이다. 서버에는 하나 이상의 도메인이 물릴 수 있다. 그렇기 때문에 DNS 서버가 아닌 실제 웹 페이지의 서버도 사용자가 요청하는 도메인을 알 필요가 있다. HTTPS 통신시에 웹서버의 인증서(공개키가 포함됨)는 이러한 정보가 전달 되는 과정에서 전송되므로, 실제 통신을 하기 전의 헤더 정보는 평문으로 전송된다. 암호화된 DNS 통신에 더불어 암호화된 SNI2Encrypted Server Name Indication, 서버가 SNI 정보를 받기 전에 DNS 서버 측에서 웹서버의 공개키를 사용자에게 전송하고, 그것을 이용해 사용자가 이용하려는 웹서버 측 컴퓨터와 대칭키를 만들어 공유한 후에, SNI 정보를 암호화하는 데 쓴다. 즉, 암호화 알고리즘을 깨지 않는 한 제 3자가 사용자가 요청하는 주소 정보를 볼 수는 없다.을 사용해야 사용자가 요쳥하는 주소도 암호화되어 안전하게 전송될 수 있다.
아쉽게도 ESNI는 TLS 1.3에서 기본 적용될 예정이었지만 성능 문제 등으로 인하여 기본 적용에서는 제외되고 현재로서는 시험적으로 클라우드 플레어의 사이트들과 파이어폭스에서 이용할 수 있다. (즉, 사용자는 파이어폭스를, 웹사이트 운영자는 클라우드 플레어를 사용해야한다. 둘 중 하나가 만족되지 않으면 도메인 주소는 평문으로 전송된다.)
먼저 파이어폭스 좌상단의 메뉴 버튼()을 클릭한다. 그 후 설정을 누르고, 일반 페이지의 제일 아래에 있는 네트워크 설정의 설정 버튼을 누른다. HTTPS를 통한 DNS를 사용 하도록 설정을 체크하고 기본값에 둔 후에 확인을 누르고 나온다. (DNS 서버에 DNS over HTTPS가 적용되어야 하므로, 아래의 순서를 거치지 않고 웹서핑을 할 수가 없다.)
그 후에 about:config에 들어가 network.trr.bootstrapAddress의 값을 1.1.1.1로 설정한다. 이렇게 하면 파이어폭스에서는 운영체제의 설정과는 별개로 클라우드플레어를 DNS 서버로써 사용하게 된다.
network.trr.mode 입력하고 값을 3으로 바꾼다. 기본값인 2로도 작동이 되어야 하지만, 종종 클라우드플레어의 DNS 서버를 한 번에 성공하지 못하면, 통신사의 DNS 서버를 거치게 될 수 있으므로, 보다 안전하고 자유롭게 사용하기 위해서 3으로 바꾼다.
마지막으로 network.security.esni.enabled의 값을 True로 바꿔 암호화된 SNI로 통신할 수 있도록 한다.
파이어폭스에서의 SNI 암호화는 DNS over HTTPS 과정을 포함하여 매우 쉽고 별도의 툴을 요구하지 않는다. 잠시만 시간을 들여 검열받지 않는 안전하고 자유로운 환경을 구축해보자.
올바르게 설정하였다면 https://www.cloudflare.com/ssl/encrypted-sni/ 에서 테스트 했을 때, 아래와 같은 결과화면을 확인 할 수 있다