[네트워크] HTTPS, TLS
in CS
HTTPS
- HTTP 에는 암호화 기법이 없음
- HTTP 통신을 하는 클라이언트와 서버 간 통신 암호화를 위해 TLS 가 추가되었는데, 이것이 HTTPS
- HTTP 바디 부분을 암호화(헤더는 암호화 안함)
- TLS 는 SSL 의 새로운 버전(SSL 3.0 기반)
대칭키, 비대칭키
대칭키
- 하나의 키를 이용하여 암호화와 복호화를 함
- abc 를 어떤 키로 암호화하여 123 이 됐으면, 123 을 해독할 때도 마찬가지로 같은 키를 사용
비대칭키
- 두 개의 키를 이용하여 암호화와 복호화를 함
- 하나의 키가 암호화를 하는 데 쓰였으면, 복호화는 나머지 키를 이용해야 함
- 이 두 개의 키를 각각 공개키, 비밀키 라고 부름
HTTPS 암호화 과정
처음에 보면 복잡할 수 있는데 단계별로 뜯어보면 이해가 쉬움
클라이언트의 대칭키
- 클라이언트가 서버에 전달하려는 정보는 해커가 중간에서 가로챌 수 있기 때문에(스니핑) “대칭키”를 이용해서 암호화하여 전달
- 그런데 이 정보를 서버가 복호화하려면 “대칭키”도 전달해야 함(그냥 전달하면 해커에 의해 가로채질 수 있음)
- 결국, 어떻게 하면 이 클라이언트의 “대칭키”를 비밀스럽게 전달하느냐가 핵심
서버의 비대칭키
- 클라이언트가 최초 접속을 했을 때, 서버는 자신의 비대칭키 중 “공개키”를 클라이언트에게 전달함
- 클라이언트는 “서버의 공개키”를 이용해서 자신의 “대칭키” 를 암호화하여 서버에게 전달
- 서버는 자신의 “비밀키”를 이용해서 (서버의 공개키로) 암호화 된 “클라이언트의 대칭키” 를 복호화할 수 있음
- 클라이언트는 “대칭키”를 안전하게 전달하였고, 이제부터 보내는 정보를 대칭키로 암호화하여 보낼 수 있음
- 중간에서 해커가 가로챌 수 있는 정보는 “서버 공개키”, “서버 공개키로 암호화된 클라이언트의 대칭키” 밖에 없음
- 비대칭키 특성 상 공개키로 암호화된 정보는 비밀키로만 해독할 수 있는데 이는 서버만 가지고 있기 때문에 해커는 할 수 있는게 없음
위조 사이트
- 해커는 부들부들한 나머지 서버의 url을 교묘하게 따라하고 (ex. 네이버 사이트를 www.maver.com로) 웹 페이지를 똑같이 만듦
- 클라이언트는 자신이 잘못된 사이트로 접속한 사실도 모른 채, 변조 사이트의 비대칭키를 받아서 위에서 한 과정을 수행함
- 해커는 클라이언트의 “대칭키”를 얻었기 때문에 앞으로 클라이언트가 보내는 암호화된 정보를 해독할 수 있음
- 여기서 두 번째 문제가 생김. 과연 내가 접속한 사이트가 “진짜” 그 사이트임을 어떻게 확신할 수 있을까
CA (Certificate Authority)
- CA 는 해당 사이트가 믿을 만한 사이트임을 증명해주는 인증 기관임
- 대표적으로 코모도, 시만텍, 고 대디 등이 있음(세계적으로 인증된 기업으로 아무나 할 수 있는게 아님)
- 모든 브라우저에는 이 CA들의 공개키들이 저장되어 있음
- 서버는 CA 에게 인증받기 위해 “자신의 공개키”를 주면서 CSR (Certificate Signing Request) 이라고 하는 요청을 보냄
- CA는 “자신의 비밀키”를 이용해서 CSR 을 요청하는 “서버의 공개키”를 암호화해서 돌려줌
- 서버는 클라이언트가 최초 접속 시, CA에 의해 암호화된 자신의 공개키를 전달
- 클라이언트, 즉 브라우저는 이 암호화된 서버의 공개키를 CA 공개키들을 이용해 복호화함
- 복호화가 잘된다? 그러면 CA로부터 인증받았다고 확신함. 왜냐하면 CA의 비밀키로 암호화된 것들은 반드시 CA의 공개키로만 복호화할 수 있으니까
- 이제 이 서버는 믿을만한 놈이니까 나의 대칭키를 줘도 됨
정리
짧게 요약해서 정리하면,
- 서버는 CA에게 자신의 공개키(CSR)를 보내서 CA의 비밀키로 암호화된 자신의 공개키를 돌려받음
- 서버가 이 암호화된 공개키를 클라이언트에게 주면, 클라이언트는 브라우저에 내장된 CA의 공개키를 통해 복호화를 시도. 복호화가 잘되면 신뢰할 수 있는 사이트임
- 믿을만한 서버니까, 이 서버의 공개키를 이용하여 자신의 대칭키를 암호화해서 줌
- 서버는 자신의 비밀키를 이용해서 클라이언트의 대칭키를 복호화
- 클라이언트의 대칭키가 성공적으로 서버에게 전달되었으므로, 이제부터 암호화된 통신이 가능
크롬에서 보면 URL 옆에 자물쇠 표시가 있는 것을 볼 수 있음. 여기서 인증서를 보면 CA 가 누구인지, 대상은 누군지 등등 정보를 볼 수 있음
반면, 인증서가 없거나 CA가 모르는 인증서이면 자물쇠에 X 표시가 뜨게 되고, 신뢰할 수 없는 사이트라고 경고를 줌