본문 바로가기

CS(Computer Science)

CS Study 2주차 : HTTP vs HTTPS / SSL(Secure Sockets Layer)

HTTP란?

  • HyperText Transfer Protocol
  • 서버/클라이언트 모델을 따라 데이터를 주고받기 위한 프로토콜
  • 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약
  • TCP/IP 80번 포트를 사용한다.
  • 보안에 대한 조치가 따로 없기 때문에 보안에 취약하다.
  • 상태 정보를 저장하지 않는 Stateless의 특징을 가지고 있다.
  • 클라이언트의 요청에 맞는 응답을 보낸 후 연결을 끊는 Connectionless의 특징을 가지고 있다.

 

HTTPS란?

  • HyperText Transfer Protocol Secure
  • HTTP의 보안이 강화된 버전이다.
  • 기존 HTTP 레이어에서 SSL(TLS) 프로토콜을 얹어 평문 데이터를 암호화 한다.
  • TCP/IP 443번 포트를 사용한다.
  • 인증기관(CA)로부터 SSL 인증서를 발급받아야 사용 가능하다.

SSL 인증서

  • 웹 사이트나 어플리케이션과 사용자 간의 통신을 보호하기 위해 사용되는 디지털 인증서

인증서 발급 과정 및 원리

  1. 서버에서 서버의 공개키와 비밀키를 생성
  2. 서버에서 인증서를 발급받기 위해 CA에 서버의 공개키와 서버의 정보를 전달
  3. 서버로부터 받은 정보들을 받아서 CA에서 SSL 인증서를 발급
  4. 발급한 SSL 인증서를 암호화 하기 위해 CA의 공개키와 비밀키를 생성하고 이 비밀키를 이용해 SSL 인증서를 암호화
  5. 암호화한 SSL 인증서를 다시 서버에 전달하여 인증서 발급 완료

SSL Handshake

  • 데이터의 암호화 및 서버 신원 확인을 위한 프로토콜
  • TCP 연결이 설정된 후에 발생

동작 과정

  1. Client -> Server로 연결 시도
    • 클라이언트에서 통신하고 싶은 서버로 연결을 시도하는 패킷 전송
      • 패킷에 클라이언트가 사용 가능한 cipher suit 목록이 있음 -> 여기에 어떤 프로토콜을 사용할지 표시
  2. Server -> Client 응답
    • 1번에서 받은 요청에 대해 서버가 응답
    • 클라이언트에서 받은 cipher suite 목록중 선택한 1개의 cipher suite를 담아서 응답
  3. Server -> Client
    • Server는 2번의 패킷 외에 클라이언트에게 Certificate라는 내용의 패킷을 보냄
      • Certificate 패킷에 서버의 SSL 인증서가 들어있음
      • 이 외에도 패킷중에 Server Key Exchange도 있는데 SSL 인증서 내의 서버의 공개키가 없는 경우
        서버가 직접 전달한다. -> 인증서 내부에 서버의 공개키가 있는 경우 생략됨 
  4. Client에서 Server의 인증서 검증
    • 클라이언트에서 서버로부터 전달 받은 서버의 SSL 인증서를 검증
      • 클라이언트는 SSL 인증서를 발급한 해당 CA의 공개키를 이용해서 복호화를 진행
        -> 해당 CA에서 발급되었다라는 것을 검증 가능
  5. Client -> Server 대칭키(비밀키) 전달
    • 클라이언트는 서버와 원하는 데이터를 안전하게 주고받기 위해서 전달하는 데이터를 암호화해야 함
      -> 데이터를 암호화하기 위한 대칭키(비밀키) 생성
    • 클라이언트는 대칭키(비밀키)를 서버만 볼 수 있게 하기 위해, 서버의 공개키로 암호화해서
      서버에 전달(Client Key Exchange) -> SSL 인증서를 검증하는 과정에서 서버의 공개키를 얻음
  6. Server / Client SSL Handshake Finished
    • 서버는 클라이언트가 전달한 암호화된 대칭키(비밀키)를 받아 서버의 비밀키로 복호화
      -> 서버의 공개키로 암호화를 하였기 때문에 서버에서 서버의 비밀키로 복호화 가능
    • 서버와 클라이언트 모두 동일한 대칭키(비밀키)를 갖고 있으니 통신이 가능해짐

 

 

 

암호화 방식

대칭키 암호화

  • 클라이언트와 서버가 동일한 키를 사용해 암호화/복호화 진행
  • 키가 노출되면 위험하지만 연산 속도가 빠름

비대칭키 암호화

  • 1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데 사용함
  • 키가 노출되어도 비교전 안전하지만 연산 속도가 느림

 


참고 블로그

참고 블로그