HTTPS

ttaho·2023년 11월 2일
1

CS

목록 보기
2/4

정보통신공학을 전공하며 학교 수업때 얼핏 들었던 HTTP와 HTTPS를 정리 하고자했다!

HTTPS가 기존의 HTTP랑 다른점

클라이언트와 서버가 통신을 할때 (예를 들어 로그인 시)
아이디, 패스워드를 서버에 보내는데 이것을 중간에 제 3자가 탈취를 하면 보안문제가 발생한다. 그래서 나온게 HTTPS이다.

HTTPS란?

HTTP + SSL, HTTP에 SSL 이라는 것을 씌워서 약점을 보완했다.

SSL : 암호화 기반 인터넷 보안 프로토콜로써 인터넷 통신에 개인정보 보호, 인증, 데이터 무결성을 위해 개발되었다.

HTTPS를 사용해야 하는 이유

  1. 내가 사이트에 보내는 정보들을 제 3자가 못보게 한다 => 암호화 해서 정보 전달
  2. 접속한 사이트가 믿을 만한 곳인지를 알게 해준다.

그럼 암호화는 어떻게 진행할까?

이것을 배우기전에 우선 대칭키 방식과 공개키 방식을 알고가자.

대칭키

  • 클라이언트와 서버가 동일한 키( 둘 다 동일한 키를 갖고 있으므로 대칭키)를 가지고 있어서 클라이언트가 암호화해서 데이터를 보내고 서버는 데이터를 대칭키를 사용해서 복호화 한다.

대칭키의 한계

  • 서버와 클라이언트가 대칭키를 공유할 때 누가 탈취한다면??? 이것을 해결하기 위해 비대칭키(공개키) 라는 개념이 등장했다.

비대칭키(공개키)

  • 2개의 서로 다른 키가 사용된다.
  • A키로 암호화 하면 B키로만 복호화가 가능!
  • 서버는 1개의 키(개인키)를 가지고 있고 다른 1개의 키(공개키)를 누구나 볼 수 있도록 공개한다.
  • 클라이언트가 공개키로 암호화 된 것을 서버로 보내면 서버는 개인키로 복호화한다 => 누군가가 가로채도 같은 공개키로는 복호화가 불가능 하기 때문에 괜춘

그럼 그 사이트가 안전한 사이트 인지는 어떻게 검증할까??

그 사이트에서 보낸 정보들은 그 사이트의 개인키로 암호화가 되어 있다. 우리가 가지고 있는 그 사이트의 공개키로 그것을 복호화가 가능하므로 검증가능!

내가 가진 공개키가 그 사이트의 공개키가 맞을까?? 하는 의심이 든다

이것은 CA라는 것을 통해 검증가능.

CA (Certificate Authority)

  • 엄격한 인증과정을 거친 검증된 기관.
  • 우리들의 브라우저( 크롬, 사파리 ) 이런것들을 CA들의 목록이 내장되어있다.

이제 HTTPS를 통해 특정 사이트에 접속할 때 어떤 과정들을 거치게 되는지 알아보자!!

  1. 클라이언트와 서버가 서로를 신뢰할 수 있는지 탐색 과정을 거친다 (HandShake)
    먼저 클라이언트가 랜덤 데이터(aaaaa)를 생성해서 서버로 보낸다.
    그럼 서버는 또 다른 데이터(bbbbb)를 만들고 그것과 함께 서버의 인증서를 클라이언트로 보낸다.

  2. 이제 클라이언트는 bbbbb와 함께 받은 서버의 인증서가 진짜인지 브라우저에 내장된 CA들의 정보를 통해서 확인한다. => 이때, 비대칭키(공개키) 시스템을 사용! CA의 인증을 받은 서버의 인증서는 그 CA의 개인키로 암호화 되어있다. 그 말은? CA의 공개키로 서버의 인증서를 복호화가 가능하다~
    즉, CA의 공개키로 복호화가 되는 서버의 인증서이면 인증된 서버이다 라는 말.
    여기서 CA의 리스트 중에 그 서버의 인증서가 해당되는 것이 없으면 브라우저에 이런것이 뜬다.

  1. 성공적으로 복호화된 서버의 인증서에는 서버의 공개키가 들어있다. 이제 클라이언트는 데이터를 암호화해서 보내면 된다.
    BUT 서버의 공개키로 암호화 하면 컴퓨터에 무리가 가기 때문에 서버와 클라이언트의 대칭키로 복호화를 한다.
    근데 대칭키는 탈취당할 수 있지 않나?? => 대칭키를 서버와 클라이언트가 공유할 때 바로 비대칭키를 사용한다!

  2. 아까 HandShake 할때 만든 데이터들 (aaaaa),(bbbbb)를 클라이언트가 혼합해서 임시 키(pre-master-secret-key)를 만든다.
    그리고 그 임시 키를 서버의 공개키로 암호화 해서 서버로 보낸다.
    서버는 그것을 서버의 개인키로 복호화하면 임시 키(pre-master-secret-key)를 획득한다.
    이 임시키를 통해 또 서버, 클라이언트 왔다 갔다 하면서 진짜 키(master-secret-key)를 만들고, 이 진짜 키로 또 세션 키(Session Key)를 만든다.
    이 세션 키를 통해 진짜로!!!! 데이터를 암호화 하고 복호화 한다. 세션키는 또 다른 서버와 클라이언트의 대칭키이다. 각 통신이 종료되면 세션 키를 파기시킨다.

몇개의 키를 만드는지 모르겠다...

profile
백엔드 꿈나무

0개의 댓글