HTTPS 연결 과정 아주 쉽게 정리하기

GJ·2023년 5월 10일
0

프론트엔드지식

목록 보기
12/14

HTTPS가 무엇인가

HTTP Secure(HTTPS)는 인터넷 상에서 정보를 암호화하는 SSL(Secure Sockets Layer) 프로토콜을 사용하여 클라이언트와 서버 간 통신을 보호하는 프로토콜이다. HTTPS는 HTTP와 마찬가지로 인터넷 상에서 데이터를 주고받는 통신 규약이지만, 보안성을 강화하기 위해 데이터 암호화 및 서버 인증 기능을 추가한 것이다.

공개키 암호화 방식과 대칭키 암호화 방식

  • 대칭키 암호화 방식은 대칭키라는 암호를 만들거나 해독하는 도구를 이용해서 양쪽에서 정보를 암호화 해서 주고 받는 방식이다. 같은 대칭키로 암호화도, 복호화도 할 수 있다. 고전적인 암호방식이라고 생각하면 된다.
  • 공개키 암호화 방식은 공개키라는 암호 만드는 도구개인키라는 암호 해독 하는 도구를 따로 분리 할 수 있어서, 한 쪽에서 공개키로 암호를 일방적으로 만들어 보내면, 다른 한 쪽에서 개인키로 암호를 해독하는 것이다.

HTTPS는 공개키 암호화 방식과 대칭키 암호화 방식을 모두 사용한다.

HTTPS는 공개키 암호화 방식과 대칭키 암호화 방식을 모두 사용한다.
HTTPS를 간단하게 설명하면 클라이언트와 서버 간 데이터 전송 시, 대칭키 방식으로 데이터를 암호화하고, 해당 대칭키를 전송하기 위해 공개키 방식으로 대칭키를 암호화한다.
즉, 데이터는 대칭키로 암호화, 데이터를 암호화하기 위한 대칭키는 공개키로 암호화! (암호 만드는 도구를 또 암호화..)

상세 과정

HTTPS에서 클라이언트와 서버 간 통신은 다음과 같은 과정을 거친다.

  1. 클라이언트는 HTTPS를 사용하여 서버에 접속하고, SSL/TLS 연결을 설정한다.
  2. 서버는 클라이언트의 요청에 대해 인증서(제 3자인 CA가 발급한 SSL 인증서, SSL 인증서에는 공개키도 포함하고 있다.)를 전송한다.
  3. 클라이언트는 서버가 전송한 인증서의 유효성을 검증한다. (CA한테 이 SSL 맞냐고 물어본다.)
  4. 검증이 완료된 인증서를 사용하여 대칭키를 생성한다.
  5. 클라이언트는 생성한 대칭키를 서버의 공개키로 암호화하여 전송한다.
  6. 서버는 전송받은 암호화된 대칭키를 자신의 개인키로 복호화하여 대칭키를 획득한다.
  7. 이후 클라이언트와 서버 간 통신은 대칭키를 사용하여 암호화되고 복호화된다.

이렇게 하는 의도

대칭키 암호화 방식으로 데이터를 암호화해서 누가 패킷을 몰래 중간에 뜯어보더라도 데이터의 내용을 알 수 없게 하고 클라이언트와 서버만 알콩달콩 데이터를 서로 확인하는게 목표이다.
대칭키 암호화 방식을 시작할 때는, 클라이언트가 서버에게 서버가 복호화를 할 수 있도록 클라이언트가 가진 똑같은 대칭키를 전송하는데, 만약 그냥 대칭키를 툭 보내고 누가 이 대칭키가 전송되는 순간을 뜯어보게 되면 그 사람이 대칭키로 내용을 복호화해서 몰래 확인 할 수 있게된다.
이를 방지하기 위해서 서버는 이 대칭키를 전송하는 순간 만큼은 공개키와 개인키 방식을 이용하는 것이다. 서버가 보내주는 공개키로 대칭키를 암호화하고, 서버는 갖고있는 개인키로 암호화된 대칭키를 다시 복호화 해서 사용한다. 그리고 얻은 대칭키로 다시 데이터를 복호화 해서 사용하는 것이다.
그리고 이후에는 서로 대칭키를 안전하게 들고 있으므로, 이 대칭키를 사용해서 암호화된 통신을 진행하는 것이다.

결국 HTTPS는 클라이언트와 서버간에 데이터를 몰래 보내는 방법이다.

HTTPS를 사용하면 데이터의 기밀성, 무결성, 인증성을 보장할 수 있다. 기밀성은 데이터가 암호화되어 전송되므로 해커 등의 제3자가 데이터를 엿볼 수 없다. 무결성은 데이터가 암호화되어 전송되므로 중간에 데이터가 변경되거나 위조될 수 없다. 인증성은 서버에서 전송한 인증서를 검증하여 서버의 신원을 확인할 수 있다.

profile
Frontend Developer

0개의 댓글