CS

[CS] HTTP와 HTTPS란 무엇이고 어떤 차이가 있을까?

  • -

HTTP와 HTTPS

HTTP

HTTP는 Hypertext Transfer Protocol의 약자로 클러아언트와 서버 간 통신을 위한 통신 규칙입니다. 사용자가 웹 사이트를 방문하면 사용자가 웹 서버에 HTTP 요청을 전송하고 웹 서버는 HTTP 응답으로 대응합니다. 즉, HTTP 프로토콜은 네트워크 통신을 작동하게 하는 기본 기술입니다.

 

HTTPS

HTTPS는 Hypertext Tranfer Protocol Secure의 약자로 HTTP에서 보안 레이어가 추가된 프로토콜입니다. HTTPS에서는 브라우저와 서버가 데이터를 전송하기 전에 암호화된 연결을 사용합니다.

 

 

HTTP의 동작 방식

  1. 클라이언트 요청:
    • 클라이언트(웹 브라우저 등)가 웹 서버에게 요청을 보냅니다. 이 요청은 보통 웹 주소(예: http://www.example.com)를 통해 전송됩니다.
    • 요청은 HTTP 메서드(GET, POST, PUT, DELETE 등)와 함께 요청 헤더, 요청 본문 등의 데이터를 포함할 수 있습니다.
  2. 서버 응답:
    • 웹 서버는 클라이언트의 요청을 받은 후 해당 요청에 대한 응답을 생성합니다.
    • 응답은 HTTP 상태 코드(200 OK, 404 Not Found, 500 Internal Server Error 등)와 함께 응답 헤더, 응답 본문 등의 데이터를 포함할 수 있습니다.
  3. 데이터 전송:
    • 클라이언트와 서버 간에는 요청과 응답을 주고받는 과정에서 데이터가 전송됩니다.
    • 이 데이터는 주로 텍스트, HTML 문서, 이미지, 동영상 등의 형태를 가질 수 있습니다.
  4. 연결 종료:
    • 요청과 응답이 완료되면, 클라이언트와 서버 간의 연결이 종료될 수 있습니다. 하지만 HTTP/1.1에서는 기본적으로 지속적인 연결을 유지하며, 여러 요청과 응답을 하나의 TCP 연결에서 처리할 수 있습니다.

 

HTTPS의 동작 방식

SSL/TLS

HTTPS의 원천 기술로는 SSL(Secure Scoket Layer)과 TLS(Transport Layer Security) 전송 기술이 있습니다. 안전한 레이어를 웹 통신에 추가하는 방식인데요. 이 기술을 수행하기 위해 웹 서버에 설치하는 것이 SSL/TLS 인증서입니다. 웹 브라우저는 공신력 있는 인증서의 정보를 브라우저 내부에 보관하고 있으며, 접속하는 웹 사이트에 믿을만한 인증서가 설치되어 있는지 확인합니다.

SSL 프로세싱

SSL 인증서 관련 프로세스의 대표적인 두 가지 암호화 방식이 있습니다. 바로 대칭키와 공개키 방식입니다.

 

  1. 대칭키 암호화
    • 하나의 암호화키(key)로 평문을 암호화하고, 다시 암호문을 원래의 평문으로 복호화하는 방식입니다.
    • 암호화, 복호화 모두 같은 키를 사용합니다.
    • 키를 분실하거나 키가 유출되면 암호문을 누군가가 복호화 할 수 있다는 단점이 있습니다.
  2. 공개키 암호화
    • 공개키, 개인키 두 개의 키를 한 쌍으로 각각 암호화와 복호화에 사용하는 방식입니다.
    • 보통 공개키로 암호화한 것을 개인키로 복호화 합니다.
    • 개인키를 먼저 생성하고 공개키를 파생하여 만듭니다.
    • 대칭키 방식에 비해 안전하지만 계산 과정이 복잡하고 연산 도중 컴퓨터의 자원이 많이 사용됩니다.

각각의 방식에 대해 장단점이 있어 실제 IT 시스템에선 두 방식을 적절히 혼합하여 사용합니다.

 

SSL 핸드쉐이크 과정

  1. Client Hello
    • 브라우저가 먼저 웹 서버에 접속합니다.
    • 이 때 다음 정보들을 전송합니다.
      • 브라우저가 사용하는 SSL 혹은 TLS 버전 정보
      • 브라우저가 지원하는 암호화 방식 모음(cipher suite)
      • 브라우저가 순간적으로 생성한 임의의 난수
      • 만약 이전에 SSL 핸드 셰이크가 완료된 상태라면, 그때 생성된 세션 아이디(Session ID)
      • 기타 확장 정보(extension)
  2. Server Hello
    • 웹서버는 Client Hello에 응답합니다.
    • 이 때 다음 정보들을 클라이언트에 전송합니다.
      • 브라우저의 암호화 방식 정보 중에서 서버가 지원하고 선택한 암호화 방식(ciper suite)
      • 서버의 공개키가 담긴 SSL인증서
      • 서버가 순간적으로 생성한 임의의 난수 
      • 클라이언트 인증서 요청 (선택사항)
  3. 브라우저가 서버의 SSL 인증서 확인
    • 서버로부터 받은 인증서가 CA에 의해 발급되었는지 본인이 가지고 있는 목록에서 확인하고, 목록에 있다면 CA 공개키로 인증서를 복호화합니다
  4. 브라우저가 자신과 서버의 난수를 이용하여 premaster secret을 생성
    • 브라우저는 자신과 서버가 순간적으로 만든 난수를 웹 서버 인증서에서 얻은 공개키로 암호화하여 서버로 전송합니다.
  5. 서버가 master secret을 생성
    • 서버는 브라우저가 보낸 premaster secret값을 복호화하여 master secret 값으로 저장합니다.
    • 이것을 사용하여 브라우저와 만들어진 연결에 고유한 값을 부여하기 위한 세션키를 생성합니다. 
  6. SSL Handshake 종료
    • handshake를 종료하고 (5)에서 만들어진 세션키를 사용하여 브라우저와 서버 사이에 주고받는 데이터를 암호화하고 복호화합니다.
    • HTTPS 통신이 완료되는 시점에서 공유된 세션키를 폐기합니다.
    • 세션이 유지되고 있는 상황이라면 브라우저는 SSL Handshake 요청이 아닌 세션 ID를 서버에게 알려줍니다.

HTTP와 HTTPS 비교

  1. 보안:
    • HTTP: HTTP는 데이터를 암호화하지 않고 전송합니다. 따라서 데이터가 네트워크를 통해 전송되는 동안 제3자가 데이터를 엿볼거나 조작할 수 있습니다.
    • HTTPS: HTTPS는 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용하여 데이터를 암호화합니다. 이는 데이터가 전송되는 동안 안전한 연결을 제공하므로 제3자가 데이터를 엿보거나 조작하는 것을 방지합니다.
  2. 통신 방법:
    • HTTP: HTTP는 평문으로 데이터를 전송합니다.
    • HTTPS: HTTPS는 SSL 또는 TLS를 사용하여 데이터를 암호화하고 인증합니다.
  3. 포트 번호:
    • HTTP: 기본 포트 번호는 80입니다.
    • HTTPS: 기본 포트 번호는 443입니다.
  4. 인증:
    • HTTP: HTTP는 보안 인증이 없습니다.
    • HTTPS: HTTPS는 SSL 또는 TLS 인증서를 통해 서버의 신원을 확인할 수 있습니다.
  5. SEO와 검색 엔진 순위:
    • HTTPS: Google과 같은 검색 엔진은 HTTPS를 사용하는 웹 사이트를 더 높은 순위로 평가합니다.
  6. 쿠키 사용:
    • HTTPS: 쿠키를 안전하게 사용할 수 있습니다. HTTP보다 보안적으로 더 안전한 쿠키 전송이 가능합니다.

요약하자면, HTTPS는 HTTP에 비해 데이터의 보안성이 더 높고, 데이터의 무결성을 보장하며, 안전한 인증을 제공합니다. 따라서 민감한 정보를 주고받거나 온라인 거래를 할 때 HTTPS를 사용하는 것이 안전합니다.


 

참고[1]: https://aws.amazon.com/ko/compare/the-difference-between-https-and-http/

참고[2]: https://yozm.wishket.com/magazine/detail/1852/

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.