HTTPS

정민교·2022년 11월 29일
0

HTTPS

Hyper Text Transfer Protocol Secure Socket Layer

이름도 길다.

Secure

HTTPS는 HTTP 요청을 SSL(TLS) 알고리즘을 이용해, HTTP 통신을 하는 과정에서 데이터를 암호화하여 전송하는 방법이다.

HTTP 요청, 응답을 통해 전송되는 데이터를 암호화하여 중간에 탈취된다고 해도 그 내용을 쉽게 파악할 수 없도록 하는 방법을 HTTPS라고 한다.

HTTPS는 클라이언트와 서버가 데이터를 암호화하여 주고받기 위해 비대칭키 방식과 대칭키 방식을 혼용하여 사용한다.

인증서

여기서 말하는 브라우저는 모두 클라이언트라고 생각하자.

HTTPS는 브라우저가 서버의 응답과 함께 전달된 인증서를 확인할 수 있다.
크롬에서는 브라우저 주소창에 자물쇠 버튼을 누르면 확인할 수 있다.

이 인증서는 서버가 믿을만한 서버라는 것을 증명한다.

예를 들어 naver에 접속했을 때 이 인증서를 통해 어느 가짜 나쁜 친구가 만든 naver 사이트가 아니고 이건 진짜 naver 서버가 보내준 사이트라는 것을 보장한다는 뜻이다.

인증서를 발급해주는 CA들은 서버의 공개키와 서비스 도메인 등의 서버 정보를 받아 CA의 비밀키로 해당 정보들을 암호화해서 인증서를 발급해준다.

인증서에는 인증서를 발급한 CA 정보, 서비스 도메인 정보, 서버의 공개 키, 암호화에 사용한 알고리즘 정보 등이 들어있다.

브라우저는 이 인증서 정보를 확인해야 하는데 암호화 되어있는 걸 어떻게 풀 수 있을까

브라우저에는 신뢰할 수 있는 CA들의 리스트와 해당 기관의 공개키를 이미 내장하고 있다. 따라서 내장된 CA의 공개키를 사용해 인증서를 복호화하여 서버의 공개 키를 확인할 수 있다.

SSL Handshake


https://brunch.co.kr/@sangjinkang/38 출처

우선 브라우저에서 웹 서버에 접속을 시도한다. 예를 들어 네이버에 접속을 시도한다고 한다.
TCP 3-way handshake를 수행한 브라우저가 접속을 시도한 서버가 HTTPS를 사용하는 것을 알게 된다.

  1. Client Hello를 진행하면서 다음의 정보를 보낸다.
  • 브라우저가 사용하는 SSL(TLS) 버전 정보
  • 브라우저가 지원하는 암호화 방식 모음(cipher suite)
  • 브라우저가 순간적으로 생성한 임의의 난수(숫자)
  • 만약 이전에 SSL handshake가 완료된 상태라면, 그때 생성된 세션 아이디
  • 기타 확장 정보(extension)

cipher suite는 SSL 프로토콜 버전, 인증서 검정, 데이터 암호화 프로토콜, hash 방식 등의 정보를 담고있다고 한다.
자세히는 모르지만 그냥 간단하게 암호화 방식이라고 생각하자.

  1. 서버는 해당 정보를 받았으면 Server Hello를 진행하면서 다음의 정보를 보낸다.
  • 서버가 선택한 cipher suite
  • 서버가 생성한 난수(숫자)
  • 인증서
  1. 브라우저는 내장된 CA 리스트의 공개키로 복호화를 해서 정말로 CA가 발급한 인증서가 맞는지, 서버의 도메인과 인증서의 도메인이 일치하는 지 등을 확인하여 인증서를 확인한다.

  2. 브라우저가 생성한 난수와 서버가 생성한 난수를 가지고 서버의 공개키로 암호화하여 대칭키를 만들어 서버로 보낸다.

  3. 서버는 서버의 개인키로 전달받은 키를 복호화해서 가지고 있는다.

  4. 서버는 SSL handshake 종료 신호를 보낸다. 이제 HTTPS 통신을 시작할 수 있다.

HTTPS를 사용한다고 전부 다 안전한 것은 아니라고 한다. 중간자 공격을 수행할 수 있는 취약점이 전달 구간 중간에 존재한다면 HTTPS는 유지되지만 전달하는 내용은 고스란히 노출된다고 한다.

HTTPS를 적용하면서도 종단 간 암호화 기술(E2E: End-to-End Encryption)을 추가적으로 적용하여서 HTTPS가 무력화되어도 노출된 데이터는 읽을 수 없도록 암호화를 유지하는 방법을 사용한다고 한다.

SSL handshake 과정이 구글링하는 것마다 약간의 차이가 존재했는데 이는 구현체마다 다양한 옵션을 가지고 있어서 그런 것이고 원리는 같다고 한다.

참고 내용 https://brunch.co.kr/@sangjinkang/38

profile
백엔드 개발자

0개의 댓글