요즘IT
위시켓
최근 검색어
전체 삭제
최근 검색어가 없습니다.

웹에서는 내가 원하는 정보를 열람하는 것뿐만 아니라, 내가 입력한 정보를 웹 사이트를 운영하는 회사의 시스템으로 전달하는 경우도 많습니다. 예를 들어, 포털 사이트에 내 계정 정보를 입력하고 로그인하거나, 은행 사이트에 접속하여 계좌 정보를 조회해 이체하는 경우가 이에 해당합니다. 만약 누군가가 이러한 개인 정보를 몰래 보거나, 이를 다시 악용한다면 더 이상 안전한 웹 서핑은 불가능할 것입니다.

회원가입을 하면 원하는 문장을
저장할 수 있어요!

다음

회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!

확인

개발

안전한 웹을 위해 HTTPS 이해하기: ①HTTPS의 작동 원리

년차,
어떤 스킬
,
어떤 직무
독자들이 봤을까요?
어떤 독자들이 봤는지 궁금하다면?
로그인

 

웹에서는 내가 원하는 정보를 열람하는 것뿐만 아니라, 내가 입력한 정보를 웹 사이트를 운영하는 회사의 시스템으로 전달하는 경우도 많습니다. 예를 들어, 포털 사이트에 내 계정 정보를 입력하고 로그인하거나, 은행 사이트에 접속하여 계좌 정보를 조회해 이체하는 경우가 이에 해당합니다. 만약 누군가가 이러한 개인 정보를 몰래 보거나, 이를 다시 악용한다면 더 이상 안전한 웹 서핑은 불가능할 것입니다.

 

이때 웹에서 정보를 보호하기 위한 가장 기본적인 기술이 HTTPS라고 할 수 있습니다. 이번 글에서는 HTTPS가 어떤 보안 기술로 브라우저와 웹 서버 사이의 통신을 지킬 수 있는지 알아보겠습니다.

 

HTTPS는 무엇인가?

HTTPS를 통한 암호화 통신 <출처: 작가>

 

웹은 안전한 통신을 위해 정보를 암호화합니다. 암호화란 일반적인 평문을 알아볼 수 없도록 암호화하여 암호문으로 만드는 과정입니다. 개인 정보가 담긴 평문을 암호화하고, 이렇게 만들어진 암호문을 상대방에게 전달하면, 상대방은 이를 다시 복호화 하여 원래의 평문으로 열람할 수 있습니다.

 

이와 같은 과정을 웹 브라우저와 웹 서버에 사용하는 대표적인 기술이 바로 HTTPS(Hypertext Transfer Protocol Secure)입니다. 인터넷 콘텐츠를 전달하는 TCP 프로토콜의 일종인 HTTP에 S(Secure) 기능을 더한 것이죠.

 

HTTPS의 원천 기술로는 SSL(Secure Socket Layer)과 TLS(Transport Layer Security) 전송 기술이 있습니다. 단어에서 알 수 있듯이 안전한 계층(layer)을 웹 통신에 추가하는 방식입니다. 이 기술을 수행하기 위해 웹 서버에 설치하는 것이 SSL/TLS 인증서입니다. TLS는 SSL의 개선 버전으로, 최신 인증서는 대부분 TLS를 사용하지만, 편의적으로 SSL 인증서라고 말합니다. 웹 브라우저는 공신력 있는 인증서의 정보를 브라우저 내부에 보관하고 있으며, 접속하는 웹 사이트에 믿을만한 인증서가 설치되어 있는지 확인합니다.

 

HTTPS는 안전한 데이터의 전달이 브라우저와 웹 서버 사이의 전달 구간에서 이루어지기 때문에, 보안 채널(secure channel), 전송 보안(secure transit)이라고 부르기도 합니다. 

 

 

SSL 인증서와 SSL 핸드셰이크에 탑재된 기술

SSL 인증서 관련 프로세스에는 아래와 같은 보안 기술이 탑재되어 있습니다.

  • 대칭키 암호화 방식
  • 비대칭키 암호화 방식
  • 통신 대상을 서로가 확인하는 신분 확인
  • 믿을 수 있는 SSL 인증서를 위한 디지털 서명
  • 디지털 서명을 해주는 인증 기관의 확인
  • 공개키를 안전하게 전달하고 공유하기 위한 프로토콜
  • 암호화된 메시지의 변조 여부를 확인하는 메시지 무결성 알고리즘

 

SSL에 사용된 보안 기술은 암호화, 인증, 서명, 공개키, 무결성 확인 등 매우 다양하기에 이것만 잘 이해하고 있어도, 웬만한 IT 보안 기술에 대한 기본은 이해할 수 있습니다. 이 중에서 대표적인 암호화 방식 두 개를 살펴보겠습니다.

 

대칭키 암호화 방식, 공개키 암호화 방식
대칭키와 공개키 암호화 방식의 차이 <출처: 작가>

 

1) 대칭키 암호화 방식

대칭키 암호화 방식이란 하나의 암호화키(key)로 평문을 암호화하고, 다시 암호문을 원해의 평문으로 복호화할 때 사용하는 방식입니다. 대문을 잠그는 자물쇠를 떠올려보면, 자물쇠를 잠근 열쇠만이 그 자물쇠를 다시 열 수 있습니다. 즉 잠그고 여는 것 모두가 하나의 열쇠를 사용합니다. 그러나 만약 이 열쇠를 잃어버렸고, 내 집 주소를 아는 사람이 열쇠를 주웠다면 어떤 상황이 될까요? 이렇듯 대칭키 암호화 방식은 키를 단 하나만 사용하는 간편함이 있지만, 키를 분실하거나 도난을 당한다면 내 암호문을 누군가가 복호화하여 볼 수 있다는 치명적인 단점이 있습니다.

 

2) 공개키 암호화 방식

공개키 암호화 방식은 공개키, 개인키 이렇게 두 개의 키를 한 쌍(키페어: key pair)으로 각각 암호화/복호화에 사용합니다. 일반적으로 공개키로 암호화한 것을 개인키로 복호화합니다. 개인키를 먼저 만들고, 여기서 공개키를 파생하여 한 쌍의 키를 만들기 때문에 키페어라고 부릅니다. 만약 같은 쌍이 아닌 다른 키를 사용하려 한다면 암호화/복호화가 불가능합니다.

 

공개키 방식은 대칭키 방식에 비해 안전하지만, 계산 과정이 복잡하고 연산 도중 컴퓨터의 자원이 많이 사용합니다. 그래서 실제 IT 시스템에서는 공개키 방식과 대칭키 방식을 적절히 혼합하여 사용합니다.

 

 

SSL 핸드셰이크 과정

SSL 핸드셰이크 과정
SSL 핸드셰이크 과정 <출처: 작가>

 

핸드셰이크(handshake)란 악수를 의미하는데요. 브라우저와 웹 서버가 서로 암호화 통신을 시작할 수 있도록 신분을 확인하고, 필요한 정보를 클라이언트와 서버가 주거니 받거니 하는 과정이 악수와 비슷하여 붙여진 이름입니다. 각 단계의 과정을 순서대로 알아보겠습니다.

 

클라이언트: ① 클라이언트에 해당하는 브라우저가 먼저 웹 서버에 접속합니다. (Client Hello)

웹 사이트 접속에 HTTPS를 사용하는 브라우저는 다음 정보를 Client Hello 단계에서 보냅니다.

  • 브라우저가 사용하는 SSL 혹은 TLS 버전 정보
  • 브라우저가 지원하는 암호화 방식 모음(cipher suite)
  • 브라우저가 순간적으로 생성한 임의의 난수(숫자)
  • 만약 이전에 SSL 핸드 셰이크가 완료된 상태라면, 그때 생성된 세션 아이디(Session ID)
  • 기타 정보

 

cipher suite는보안의 궁극적 목표를 달성하기 위해 사용하는 방식을 패키지의 형태로 묶어 놓은 것을 의미합니다. 여기서 보안의 목표는 다음과 같습니다.

  • 안전한 키 교환
  • 전달 대상 인증
  • 암호화 알고리즘
  • 메시지 무결성 확인 알고리즘

 

서버: ② 웹 서버는 ①번에 응답하면서 아래 정보를 클라이언트에 제공합니다. (Server Hello)

  • 브라우저의 암호화 방식 정보 중에서 서버가 지원하고 선택한 암호화 방식(cipher suite)
  • 서버의 공개키가 담긴 SSL 인증서. 인증서는 CA의 비밀키로 암호화되어 발급된 상태입니다.
  • 서버가 순간적으로 생성한 임의의 난수(숫자)
  • 클라이언트 인증서 요청(선택사항)

 

클라이언트: ③ 브라우저는 서버의 SSL 인증서가 올바른지 확인합니다.

대부분 브라우저에는 공신력 있는 CA들의 정보와 CA가 만든 공개키가 이미 설치되어 있습니다. 서버가 보낸 SSL 인증서가 정말 CA가 만든 것인지를 확인하기 위해, 내장된 CA 공개키로 암호화된 인증서를 복호화합니다. 정상적으로 복호화되었다면 CA가 발급한 것이 증명되는 셈입니다. 만약 등록된 CA가 아니거나, 등록된 CA가 만든 인증서처럼 꾸몄다면 이 과정에서 발각이 되며 브라우저 경고를 보냅니다.

 

클라이언트: ④ 브라우저는 자신이 생성한 난수와 서버의 난수를 사용하여 premaster secret을 만듭니다.

웹 서버 인증서에 딸려 온 웹 사이트의 공개키로 이것을 암호화하여 서버로 전송합니다.

 

서버: ⑤ 서버는 사이트의 비밀키로, 브라우저가 보낸 premaster secret 값을 복호화합니다.

복호화한 값을 master secret 값으로 저장합니다. 이것을 사용하여 방금 브라우저와 만들어진 연결에 고유한 값을 부여하기 위한 세션키를 생성합니다. 세션키는 대칭키 암호화에 사용할 키입니다. 이것으로 브라우저와 서버 사이에 주고받는 데이터를 암호화하고 복호화합니다.

 

서버/클라이언트: ⑥ SSL 핸드셰이크를 종료하고 HTTPS 통신을 시작합니다.

브라우저와 서버는 SSL 핸드셰이크가 정상적으로 완료되었습니다. 이제는 웹상에서 데이터를 세션키를 사용해 암호화/복호화하며, HTTPS 프로토콜을 통해 주고받을 수 있습니다. HTTPS 통신이 완료되는 시점에서 서로에게 공유된 세션키를 폐기합니다. 만약 세션이 여전히 유지되고 있다면 브라우저는 SSL 핸드셰이크 요청이 아닌 세션 ID만 서버에게 알려주면 됩니다. 이 부분은 ①에서 언급했습니다.

 

SSL 핸드셰이크 과정은 구현체마다 조금씩 다른 옵션을 가지고 있지만, 대부분의 원리는 위의 내용에서 크게 벗어나지 않습니다. SSL 인증서에는 대칭키 방식과 공개키 방식 두 개 모두 사용하며, 모든 웹 콘텐츠의 전달을 공개키 방식으로 한다면 웹 서버와 브라우저에 많은 부담이 됩니다. 그래서 SSL 핸드셰이크 단계까지는 공개키 방식, 그 이후의 HTTPS 통신은 대칭키 방식을 사용합니다.

 

 

HTTPS
<출처: freepik>

 

HTTPS를 적용하면 100% 안전할까?

HTTPS는 웹에서 보안을 적용하기 위한 가장 기본적인 단계이고, 이것으로 모든 보안성이 완벽하게 지켜졌다고 할 순 없습니다. 예를 들면, 웹 서버가 해커의 다양한 공격에 의해 루트 권한을 탈취당했다면, 모든 기밀 데이터를 열람할 수 있는 권한이 넘어갈 수도 있습니다. 또한 HTTPS는 전달 구간에 대한 보안 기술인데, 전달 구간 중간에 해커가 중간자 공격을 수행할 수 있는 취약점이 있다면 HTTPS는 유지되지만 전달하는 내용은 고스란히 노출되기 때문입니다.

 

따라서 인스턴트 메시징 서비스와 같이 개인 간 혹은 그룹 간 대화, 민감한 개인 정보 등의 전달에서는 HTTPS를 적용하면서도, 종단 간 암호화 기술을 추가로 적용하여 HTTPS가 무력화되어도 노출된 데이터는 암호화를 유지해, 외부로 노출되지 않도록 하는 방법이 일반적으로 쓰입니다.

 

지금까지 안전한 웹을 위한 HTTPS 기술의 작동 원리를 살펴봤습니다. 다음 글에서는 웹 사이트 접속 시 HTTPS를 강제로 사용하기 위한 브라우저와 웹 서버의 약속인 HSTS(HTTP Strict Transport Security) 기능에 대해 알아보겠습니다.

 

요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.

좋아요

댓글

공유

공유

댓글 0
작가
91
명 알림 받는 중

작가 홈

작가
91
명 알림 받는 중
테크유람(https://blog.naver.com/techtrip) 블로그를 운영하고 있으며 클라우드, 오픈 소스, 웹 성능과 선진적인 DevOps 적용에 관심이 많은 블로거입니다.

삼성SDS에서 웹 개발자로 IT 경력을 시작하였고 이후 마이크로소프트에서는 Xbox 게임 타이틀 개발을, 현재는 클라우드 서비스를 제공하는 IT 기업에서 아시아 지역의 기술 컨설팅을 담당하고 있습니다.

12권의 IT 도서의 저자이기도 하며 글과 콘퍼런스, 교육을 통해 다양한 IT 기술을 많은 이에게 전달하고 공유하며, 상호 작용하는 IT 엔지니어의 삶을 즐기고 있습니다.

좋아요

댓글

스크랩

공유

공유

요즘IT가 PICK한 뉴스레터를 매주 목요일에 만나보세요

요즘IT가 PICK한 뉴스레터를
매주 목요일에 만나보세요

뉴스레터를 구독하려면 동의가 필요합니다.
https://auth.wishket.com/login