HTTPS 란?

저니·2023년 3월 30일
0
post-thumbnail

HTTPS?

HTTPS는 HTTP와는 달리 TLS(Transport Layer Security)라는 암호화 프로토콜을 이용해, 서버와 클라이언트가 서로 주고받는 데이터를 암호화 한다.

이 방식을 이용해서

  • 클라이언트와 서버는 데이터를 주고 받는 상대가 서로임을 확인할 수 있고
  • 주고 받는 데이터는 모두 암호화되어서 제 3자가 알아볼 수 없게 된다.

그리고 HTTPS는 위와 같은 암호화를 위해 공개키 암호화방식을 이용한다.

🔐 공개 키 암호화 방식

공개 키개인 키 라는 두 개의 키를 이용해 데이터를 암호화/복호화 하는 알고리즘이다. 공개키는 말 그대로, 외부에 공개되어도 되는 키 값이며, 개인 키는 외부에 공개하면 안되는 키 값이다. 그리고 공개키로 암호화 한 값은 개인 키로만 복호화 가능하다.

클라이언트가 서버에 데이터를 보내기 위해선 서버의 공개키를 이용해 데이터를 암호화한 후 데이터를 보낸다. 이 데이터는 서버의 개인 키로만 해독할 수 있으므로 중간에 누군가가 패킷을 가로채더라도, 서버의 비밀키가 없으므로 해독할 수 없게된다. 따라서 안전하게 클라이언트와 서버가 통신을 할 수 있게 된다.

📝 인증 기관 (Certificate Authority)

클라이언트가 서버에 HTTPS로 접속하게 되면, 서버는 공개키를 바로 보내는 것이 아니라 인증기관이 서명한 인증서를 보내주는데, 이 인증서에 공개키가 담겨있다.

여기서 인증기관은 서버가 정보를 탈취하고자 하는 제 3자가 아니라 신뢰할만한 서버인지 확인해주는 역할을 한다. 그렇기 때문에 HTTPS 연결을 허용하고자 하는 서버는 인증기관에서 인증서를 발급받아야 한다 (Let's encrypt 처럼 인증기관을 거치지 않고 자체 발급하는 방법도 있다).

인증 기관은 하나만 존재하는 것이 아니라 여러 개 존재하며, 계층적인 구조로 되어있다. 최상위엔 모두가 신뢰하기로 협의한 root 인증기관이 있다. root 인증기관 하위에 중간 인증기관들이 있는데, 서버가 인증서 발급을 원하는 경우 이 중간 인증기관에서 인증서를 발급받는다. 상위 인증기관이 하위 인증기관을 검증해주는 식이라, 중간 인증기관에서 발급받아도 root가 인증한 인증서가 된다.

이러한 연결관계를 인증서 체인(Certificate Chain)이라 하며, 직접 인증서에서 확인해 볼 수도 있다. 브라우저 주소 창 왼쪽의 자물쇠 표시 🔒를 눌러서 인증서를 보면 아래와 같은 인증서 체인을 볼 수 있다.

인증기관은 자신의 개인 키로 인증서를 암호화(서명)하여 서버에게 발급해준다. 클라이언트는 인증 기관의 공개키로 서버의 인증서를 해독하여 서버가 신뢰할만한 서버인지 확인한다.

브라우저의 경우 주요 인증기관의 공개키를 이미 가지고 있기 때문에, 서버의 인증서를 검증할 때 마다 인증기관에서 공개키를 가져오는 것이 아니라 이미 가지고 있는 공개키로 인증서를 해독한다.

정리

  • HTTPS는 공개키 암호화 방식으로 데이터를 암호화하고, 서로의 신원을 확인할 수 있게 한다.
  • HTTPS를 지원할 서버는 인증기관에서 인증서를 발급받아야 한다.
  • 클라이언트는 서버에게서 인증서를 받으면, 인증서의 인증기관 공개키로 인증서를 해독한다.
  • 클라이언트는 인증기관을 확인하여 인증기관이 신뢰할만한 곳인지 알 수 있다.
  • 인증서를 해독한 후 인증서의 공개키로 데이터를 암호화하여 서버와 통신을 시작한다.

0개의 댓글