[네트워크] HTTPS 파헤쳐 보기

Kim Hyen Su·2024년 11월 29일

면접질문

목록 보기
24/27
post-thumbnail

참고 포스팅

프로젝트 진행 중 프론트 서버가 HTTPS로 전환되면서, 백엔드 서버와의 통신이 보안상 불가능해져 이를 해결하고자 백엔드 서버에서도 SSL 인증서 발급 및 HTTPS 전환을 진행해보려고 한다. 또한, 이전 면접에서 HTTP와 HTTPS 간의 차이점과 HTTPS 전환 과정에 대해서 여쭤보는 기업들이 있어 이 참에 블로그에 정리해보려고 한다.

사전 지식

HTTPS에 대해서 학습하기 전에 비교대상이 되는 HTTP와 사용되는 암호화 방식들에 대한 내용을 사전에 정리한 뒤 본문으로 들어가보자.

HTTP의 문제점

HTTP는 Hyper Text Transfer Protocol의 약자로써, 하이퍼텍스트를 전송하기 위해 사용되는 통신 규약이다. 인터넷 환경에서 클라이언트가 HTML 문서를 서버로부터 요청 시에 사용된다.

일반적으로 HTTP 기본 포트는 80번 포트를 사용하며, 클라이언트가 TCP 80 포트를 사용하여 연결하면 서버는 요청에 응답 후 자료를 전달해준다. 하지만, HTTP 통신은 plain text를 주고 받기 때문에 네트워크 보안상 중간에 정보가 노출될 수 있는 위험이 있다. 따라서, 이와 같이 보안적인 측면의 위험성을 해결하고자 나온 개념이 HTTPS이다.

대칭키 암호화 방식

암호화와 복호화를 동일한 키를 사용하기 때문에, 대칭키라는 명칭으로 불린다. 이는 비대칭키에 비해서 암호화/복호화 속도가 빠르다. 하지만, 타인에 의해 탈취될 위험이 있다.

비대칭키(공개키) 암호화 방식

비대칭키 방식은 서로 다른 키로 암호화와 복호화가 수행되는 암호화 기법이다. 공개키 암호화 방식은 2개의 비대칭키를 관리하는데, 하나는 공개키, 다른 하나는 개인키로 관리한다. 공개키로 암호화를 수행하고, 개인키를 사용하여 복호화할 수 있도록 하기 때문에 보안성이 높다.

HTTPS

HTTPS는 기본적으로 HTTP와 거의 동일하지만, 데이터를 주고 받는 과정에서 보안 요소가 추가된 점이 큰 차이점입니다. HTTPS를 사용 시 서버와 클라이언트 간의 통신되는 내용들이 모두 암호화 됩니다. HTTPS는 SSL 또는 TLS 프로토콜을 통해 세션 데이터를 암호화하며, 기본 TCP/IP 포트는 443이고, SSL 프로토콜 위에서 HTTPS 프로토콜이 동작하게 된다.

TLS
SSL에서 발전하여 이름이 변경된 것이 TLS입니다. 하지만, 아직도 SSL 인증서라는 명칭이 많이 사용됩니다.

SSL/TLS 방식을 적용하기 위해서는 인증서를 발급 받아야 한다. 이러한 인증서를 발급하는 기관을 CA라고 부른다. 공인인증서의 경우 웹 브라우저는 미리 CA 리스트와 함께 각 CA의 공개키를 알고 있다.

동작 과정

  1. 사이트에서는 내부적으로 공개키와 개인키를 만든 뒤, 신뢰할 수 있는 인증 기관(CA)에 제출한다.

  2. 인증 기관은 내부적인 비대칭키가 존재한다. 인증기관은 사이트에서 제출한 데이터를 검증한 뒤 인증 기관 내 개인키로 암호화하여 인증서를 만들어 사이트로 제공해준다.

  3. 인증 기관은 웹 브라우저에게 공개키를 제공한다.

  4. 사용자가 사이트에 요청 시 서버는 자신의 인증서를 웹 브라우저에게 보낸다.

  5. 웹 브라우저는 인증 기관에서 제공한 공개키로 인증서를 해독하여 검증한다. 그러면 사이트의 정보와 서버의 공개키를 알 수 있게 된다.

  6. 웹 브라우저는 얻은 서버의 공개키로 대칭키를 암호화하여 서버로 전달한다.

  7. 서버는 개인키로 암호문을 해독하여 대칭키를 얻게 되고, 이제 대칭키를 통해서 데이터를 주고 받을 수 있게 된다.

    장단점

  • HTTPS는 웹사이트의 무결성을 보호해준다. 웹 사이트와 사용자 브라우저 사이의 통신을 침입자가 건드리지 못하도록 한다. (침입자라함은, 악의가 있는 공격자는 물론이고, 합법이지만 통신에 침입하여 페이지에 광고를 삽입하는 경우도 해당한다.)

  • 가벼운 웹 서핑이라면 HTTP도 상관없지만, 사용자의 정보를 웹 서버와 주고 받아야하는 경우라면 HTTP는 정보 유출의 위험성을 갖게 된다. HTTPS는 침입자가 웹사이트와 사용자 사이의 통신을 몰래 수신하는 것을 방지함으로써 보안을 강화해준다.

  • getUserMedia()를 통한 사진 촬영이나 오디오 녹음, 프로그레시브 웹 앱과 같은 강력한 웹 플랫폼 신기능들은 실행하려면 사용자의 명시적인 권한 허락을 필요로 한다. 지오로케이션 API와 같은 오래된 API들도 실행할 때 권한이 필요하도록 업데이트되고 있는데, HTTPS는 이러한 새 기능과 업데이트된 API에 대한 권한 허락을 가능하게 한다.

  • 네이버, 다음은 물론이고 구글 역시 검색 엔진 최적화(SEO: Search Engine Optimization) 관련 내용을 HTTPS 웹사이트에 대해서 적용하고 있다. 즉, 키워드 검색 시 상위 노출되는 기준 중 하나가 보안 요소이다.

  • 모든 사이트에서 텍스트를 암호화해서 주고 받으면 과부하가 걸려 속도가 느려질 수 있다. 중요한 사이트는 HTTPS로 관리하고, 그렇지 않은 사이트는 HTTP를 사용한다.

  • HTTPS를 지원한다고 해서 무조건 안전한 것은 아니다. 신뢰할 수 있는 CA 기업이 아니라 자체적으로 인증서를 발급할 수도 있고, 신뢰할 수 없는 CA 기업을 통해서 인증서를 발급받을 수도 있기 때문이다.

profile
백엔드 서버 엔지니어

0개의 댓글