Home [Web] HTTPS
Post
Cancel

[Web] HTTPS

HTTPS(Hypertext Transfer Protocol Secure)란?

HTTPS는 웹 브라우저와 웹 사이트 간에 데이터를 전송하는 데 사용되는 TCP 프로토콜의 일종인 HTTP에 S(Secure)기능을 더한 것입니다.

HTTPS 동작방식

HTTPS의 동작방식을 알아보기 전에 웹 동작방식을 간단하게 살펴보겠습니다.

웹 동작방식은 아래와 같습니다.

  1. 웹 브라우저에 URL을 입력하고 Enter 키를 누릅니다.
  2. 웹 브라우저가 도메인의 IP주소를 조회합니다. (먼저 캐시를 찾고, 그 다음 DNS를 검색합니다.)
  3. 웹 브라우저가 찾은 IP주소를 기반으로 서버와의 TCP 연결을 시작합니다.
  4. 웹 브라우저가 HTTP 요청을 서버로 전송합니다. (필요한 경우, HTTPS 보안 통신이 진행됩니다.)
  5. 웹 서버가 요청을 처리하고 응답을 다시 웹 브라우저로 전송합니다.
  6. 웹 브라우저가 전송 받은 콘텐츠를 렌더링합니다.

더 자세한 내용은 이 글을 참조해주시기 바랍니다.

이처럼 웹 브라우저(클라이언트)가 웹 서버와 연결할 때 HTTPS에서는 SSL/TLS 핸드셰이크가 추가됩니다.

SSL과 TLS

HTTPS의 원천 기술로는 SSL(Secure Socket Layer)과 TLS(Transport Layer Security)이 있습니다.

단어에서 알 수 있듯이 안전한 계층(layer)를 웹 통신에 추가하는 방식입니다.

TLS는 SSL의 개선 버전으로, 최신 인증서는 대부분 TLS를 사용하지만, 편의적으로 SSL 인증서라고 말합니다.

SSL/TLS 핸드셰이크

핸드셰이크란 브라우저와 웹 서버가 서로 암호화 통신을 시작할 수 있도록 신분을 확인하고, 필요한 정보를 클라이언트와 서버가 주거니 받거니 하는 과정이 악수와 비슷하여 붙여진 이름입니다.

https

1. 클라이언트에 해당하는 브라우저가 먼저 웹 서버에 접속합니다. (Client Hello)

만약 이전에 SSL 핸드셰이크가 완료된 상태라면 그 때 생성된 세션ID를 재사용할 수 있습니다.

2. 웹 서버는 1번에 응답하면서 SSL 인증서를 클라이언트에 제공합니다. (Server Hello)

3. 브라우저는 서버의 SSL 인증서가 올바른지 확인합니다.

대부분 브라우저에는 공신력있는 CA들의 정보와 CA가 만든 공개키가 이미 설치되어 있습니다. 서버가 보낸 SSL 인증서가 정말 CA가 만든 것인지 확인하기 위해 내장된 CA 공개키로 암호화된 인증서를 복호화합니다.

4. 브라우저는 자신의 생성한 난수와 서버의 난수를 이용하여 premaster secret을 만듭니다.

웹 서버 인증서에 딸려 온 공개키로 premaster secret 값을 암호화하여 전송합니다.

5. 서버는 브라우저가 보낸 premaster secret 값을 복호화합니다.

복호화한 값을 master secret 값으로 저장합니다. 이것을 사용해서 브라우저와 만들어진 연결에 고유한 값을 부여하기 위해서 세션키를 생성합니다. 이 세션키로 브라우저와 서버 사이에 주고받는 데이터를 암호화하고 복호화합니다. (대칭키 암호화에 사용할 키가 된다.)

6. SSL 핸드셰이크를 종료하고 HTTPS 통신을 시작합니다.

세션키를 사용해서 데이터를 암호화/복호화하면서 주고받을 수 있습니다.

HTTPS 통신이 완료되는 시점에 서로에게 공유된 세션키를 폐기합니다. 만약 세션이 여전히 유지되고 있다면 브라우저는 세션 ID만 서버에게 알려주면 됩니다.

이러한 TLS 핸드셰이크는 언제 발생할까요?

  • TLS 핸드셰이크는 사용자가 HTTPS를 통해 웹 사이트를 탐색하고 브라우저가 처음 해당 웹 사이트의 원본 서버를 쿼리하기 시작할 때마다 발생합니다.
  • 다른 통신이 API를 호출하거나 HTTPS를 통한 DNS 쿼리를 사용할 때에도 매번 TLS 핸드셰이크가 발생합니다.
  • TLS 핸드셰이크는 TCP 핸드셰이크를 통해 TCP 연결이 열린 후에 발생합니다.

웹 사이트에서 TLS가 필요한 이유

사용자의 데이터를 안전하게 유지한다.(암호화)

SSL 인증서가 지원하는 공개-개인 키 페어링을 통해 SSL/TLS 암호화가 가능합니다. 클라이언트(예: 웹 브라우저)는 서버의 SSL 인증서에서 TLS 연결을 여는 데 필요한 공개 키를 받습니다.

웹 사이트의 소유권을 확인한다.(인증)

SSL 인증서는 클라이언트가 실제로 도메인을 소유하고 있는 올바른 서버와 통신하고 있는지 확인합니다. 이렇게 하면 도메인 스푸핑 등의 공격을 방지할 수 있습니다.

HTTPS로 사용자의 신뢰를 얻을 수 있다.

사용자 관점에서 사이트를 더욱 신뢰할 수 있게 해줍니다. 대부분의 브라우저는 HTTP 사이트에 “안전하지 않음”이라는 태그를 눈에 띄는 방식으로 지정하여 HTTPS로 전환하고 보안을 강화하게 유도하는 인센티브를 제공합니다.

출처

  • https://www.cloudflare.com/ko-kr/learning/ssl/what-is-an-ssl-certificate/
  • https://yozm.wishket.com/magazine/detail/1852/
This post is licensed under CC BY 4.0 by the author.

[Web] Servlet, JSP 그리고 Spring

[OS] Race condition 경쟁상태