main-logo

HTTPS

안전한 웹서비스 구동을 위한 HTTPS의 원리 이해하기

profile
강영민
2023년 08월 19일 · 0 분 소요

들어가며

이번 포스팅에서는 웹 서비스를 구현하는 과정에서 가장 기본적인 정보 보안과 이를 위한 HTTPS프로토콜의 동작방식과 구성요소들에 대해서 간단하게 작성해 보려고 합니다.

HTTPS란?

img1.webp


HTTPS(Hypertext Transfer Protocol Secure)는 웹 브라우저와 웹서버 간에 암호화된 통신을 가능하게 하는 기술입니다.

인터넷에서 정보를 교환할 때 기본으로 HTTP를 사용합니다만, 이 프로토콜을 사용하면 중간에 정보가 탈취될 위험성이 존재합니다.

이를 막기 위해 HTTPS는 SSL(Secure Socket Layer)이나 TLS(Transport Layer Security) 프로토콜을 사용하여 통신을 암호화합니다.

* SSL과 TLS

SSL과 TLS는 보통 같은 뜻으로 말하며 TLS1.0은 SSL3.0을 계승하고 있습니다쉽게 생각하면 SSL의 New Version이 TLS입니다. 하지만 TLS라는 이름보단 SSL이라는 이름으로 좀 더 보편적으로 사용되고 있습니다.

SSL/TLS 주요 역할

  • 암호화: 도청되더라도 내용을 알 수 없도록 암호화한다.
  • 인증: 올바른 대상인지 인증한다.
  • 조작검사: 내용이 조작이 되었는데 검사한다.

SSL 인증서는 클라이언트와 서버 간의 통신을 제3자가 보증해 주는 전자화된 문서입니다. 클라이언트가 서버에 접속한 직후에 서버는 클라이언트에게 이 인증서 정보를 전달하며 클라이언트는 이 인증서 정보가 신뢰할 수 있는 것인지를 검증한 후에 다음 절차를 수행하게 됩니다 SSL 디지털 인증서를 이용했을 때의 이점은 아래와 같습니다.

  • 통신 내용이 공격자에게 노출되는 것을 막을 수 있다.
  • 클라이언트가 접속하려는 서버가 신뢰할 수 있는 서버인지를 판단할 수 있다.
  • 통신 내용의 악의적인 변경을 방지할 수 있다.

HTTPS의 구성요소

img2.jpeg

  • SSL/TLS 프로토콜: 이 프로토콜들은 웹 브라우저와 웹 서버 간의 통신 내용을 암호화합니다. 이로 인하여 사용자와 서버 간의 정보 전송이 안전해집니다.
  • SSL/TLS 인증서: SSL/TLS 인증서는 공개키 기반 암호화 기법의 일부로, 쌍을 이루는 공개키와 비공개키를 사용합니다. 사용자의 브라우저는 인증서를 통해 애플리케이션에 보낼 데이터를 암호화하며, 웹 서버는 비밀 키를 사용하여 데이터를 복호화합니다. 또한 인증서는 인증의 신뢰성을 제공하기 위해 발급기관에 의해 발급됩니다.

HTTPS의 동작과정

img3.jpg
  • 1~2단계: Hello & Cipher Suites!
    브라우저와 서버는 인사를 하고 사용할 암호 제품군(암호화 알고리즘)에 동의합니다. (HTTPS/SSL/TLS는 여러 암호화 제품군을 지원합니다.)
  • 3~5단계: 인증서 및 키 교환
    서버는 관련 공개 키와 함께 SSL 인증서 및 중간 인증서를 브라우저로 보냅니다. 브라우저는 디지털 서명과 브라우저가 신뢰하는 루트 인증서를 기반으로 SSL 인증서를 확인합니다 검사 중 하나라도 실패하면 연결이 중단되고 오류 메시지가 표시됩니다. 어떤 검사도 실패하지 않는 한, 이 시

    브라우저가 웹 서버의 SSL 인증서를 확인했으므로 웹 서버가 인증되었습니다 이제 브라우

  • 저에는 서버의 공개키가 있으므로 브라우저는 서버에서만 읽을 수 있는 메시지를 암호화할 수 있습니다 하지만 연결은 단방향(브라우저 -> 서버)으로만 안전하게 사용할 수 있으

  • 므로 아직 완료되지는 않았습니다

  • 점에서 우리는 기술적으로 안전한 통신 채널을 가지고 있습니다.

  • 6~10단계: 대칭 암호화 설정 대칭 암호화(암호화 및 암호 해독에 동일한 키 사용)가 실제로 더 효율적이므로 브라우저와 서버는 이제 암호화 및 암호 해독에 사용할 수 있는 새로운 공유 암호화 키를 생성합니다. (브라우저와 서버가 공유 세션 키를 생성하는 정확한 방법은 사용 중인 암호 그룹[암호화 방법]에 따라 다릅니다.)

    세션 키가 생성되면 TLS 핸드셰이크 프로세스가 완료됩니다. 브라우저와 서버는 세션 키를 사용하여 교환하는 모든 데이터를 암호화하고 해독합니다.

    이제 브라우저에 웹 서버와의 보안 HTTPS 통신을 위한 양방향 보안 통신 채널이 생겼습니다. 다른 사람이 정보를 염탐하는 것에 대해 걱정할 필요 없이 데이터를 안전하게 보내고 받을 수 있습니다.

HTTPS를 사용하지 않았을 때의 위험성(Risk)

  1. 중간자 공격 (Man-in-the-Middle Attack): HTTP 프로토콜은 통신 내용이 암호화되지 않기 때문에, 제3자가 클라이언트와 서버 사이에서 정보를 탈취하거나 조작할 수 있습니다. 이를 통해 민감한 정보가 탈취되거나 원본 데이터가 조작될 위험이 있습니다.
  2. 데이터 보안: HTTP를 사용하는 경우 데이터가 평문으로 전송되어, 패킷 캡처를 통해 정보를 쉽게 읽을 수 있습니다. 이렇게 되면 비밀번호, 신용카드 정보, 개인 식별 정보 등 민감한 데이터가 노출될 수 있습니다.
  3. 서버 인증 부재: HTTPS는 인증서를 통해 서버의 신원을 확인할 수 있지만, HTTP는 이러한 방어 체계가 없습니다. 이로 인해 사용자는 완전히 신뢰할 수 있는 사이트인지 알 수 없으며, 보안에 취약한 사이트에 유저 데이터가 노출될 수 있습니다.
  4. 피싱 공격 (Phishing Attack) 유도: HTTPS가 없는 사이트는 높은 확률로 피싱 공격을 당할 수 있습니다. 피싱 공격은 사용자를 속여 민감한 정보를 빼내거나 악성 코드를 설치하는 등의 공격입니다. 안전한 사이트를 가장한 가짜 사이트를 이용한 공격이 흔하며 HTTPS가 없는 경우 이런 위험도 상승합니다.
  5. 타격받는 브랜드 이미지 및 사용자 신뢰감: 많은 사용자들은 HTTPS가 있는 사이트에 대해 더 높은 신뢰감을 갖습니다. 반면에 HTTP를 사용하는 사이트는 신뢰도가 낮기 때문에, 브랜드 이미지와 사용자들의 신뢰도가 저하될 수 있습니다.

HTTPS를 사용했을 때 다른 이점(Benefit)

  1. SEO (검색 엔진 최적화): 많은 검색 엔진들, 특히 Google은 검색 결과 순위에 영향을 주는 요소로서 HTTPS를 고려합니다. 따라서 HTTPS를 사용하는 웹사이트는 검색 엔진에서 더 높은 순위를 얻을 가능성이 높아지며, 이로 인해 웹사이트에 많은 사용자들이 유입됩니다.
  2. 웹 성능 향상: HTTPS는 최신 웹 프로토콜인 HTTP/2를 포함하고 있습니다. HTTP/2는 웹 페이지 로딩 속도를 향상시키기 위한 기술로서, 여러 파일을 동시에 다운로드 받는 Multiplexing(멀티플렉싱) 기능, 파일 압축, 서버 푸시 등을 지원합니다. 이러한 기능들은 웹페이지의 로딩 속도를 향상시키고 사용자 경험을 개선하는데 도움이 됩니다.
  3. 사용자 신뢰감 향상: 사용자들은 보안에 대해 점점 더 관심이 있습니다. HTTPS가 적용된 사이트는 브라우저에서 키패드 모양이나 그린 바 등의 안전한 사이트로 표시되며, 이로 인해 사용자들의 신뢰도가 향상됩니다. 이는 사용자들에게 안전한 서비스를 제공하는 기업 이미지를 구축하는데 도움이 됩니다.
  4. 데이터 무결성 보장: HTTPS는 데이터를 암호화하는 과정에서 무결성도 동시에 보장합니다. 이를 통해 중간에 데이터 변조나 조작이 발생했을 때 알아챌 수 있으며, 이를 통해 악의적인 공격을 탐지하고 대응할 수 있습니다.
  5. 브라우저 기능 확장: 몇몇 웹 브라우저 기능들은 보안적 이유로 HTTPS를 필요로 합니다. 예를 들어, 위치 정보를 요구하는 Geolocation API, 모바일 장치에서 배터리 상태를 체크하는 Battery Status API 등은 HTTPS 환경에서 사용가능하며, 이외의 기능도 점차HTTPS에 의존하게 됩니다.

마치며

간단하게 HTTPS 프로토콜의 구성, 동작방식에 대해서 알아봤는데요 우리가 웹서비스를 구현하면서 사용자들의 정보 보안, 서비스의 신뢰성을 생각하면 아무래도 HTTPS는 고려해야 하는 요소가 아닌 필수 구성으로 봐야 할 것 같습니다. 네트워크나 웹서버에 대해서 관심을 가지고 있다면 직접 웹서버에 SSL/TLS 인증서를 이용해 HTTPS 프로토콜을 적용해 보는 것도 추천해 드립니다 시중에 꼭 유료인증서가 아닌 Let’s Encrypt에서 무료로 발급해 주는 인증서를 적용해 볼 수도 있습니다. 이것으로 이만 이번 포스팅을 마칩니다.

 

참고문서