다시 읽어보는 HTTPS 동작 원리

정성연·2022년 8월 9일
9
post-thumbnail

1. HTTPS란 무엇입니까 ?


HTTPS란 웹사이트와 사용자 사이의 보안 커넥션 입니다.

HTTPS란 사용자 컴퓨터와 방문한 사이트 간에 전송되는 사용자 데이터의 무결성기밀성을 유지할 수 있게 해주는 인터넷 통신 프로토콜입니다.

2. HTTP와 HTTPS는 어떻게 다른가요 ?


HTTP는 하이퍼미디어 문서를 전송하기 위한 어플리케이션 프로토콜입니다. HTTP를 통해 웹 브라우저와 웹 서버간 데이터를 송수신 할 수 있습니다.
HTTP의 문제는 송수신하는 도중 정보가 암호화 되지 않는다는 문제가 있습니다. 이 말은 데이터가 쉽게 도난당할 수 있다는 것을 의미합니다.

HTTPS는 보안을 위해 아래와 같은 3가지를 보장합니다.

  • Authorization(인증): 사용자가 방문한 웹사이트와 데이터를 주고 받고 있는게 맞는지 입증합니다. 이는 중간자 공격을 차단합니다.
  • Data integrity(무결성): 데이터가 전송되는 동안 데이터가 손상되거나 의도적으로 변경되는 일을 방지합니다.
  • Encryption(암호화): 데이터를 주고받는중 사용자와 웹서버가 아니라면 정보를 확인 할 수 없게 합니다.

HTTPS는 위 3가지를 토대로 신뢰성 있는 정보 전달을 도와줍니다.

HTTPS는 SSL 인증서를 통해 위 3가지 보안적인 기능을 제공합니다.

3. 대칭키 &공개키 알고리즘


3-1 대칭키 알고리즘

대칭키는 동일한 키로 암호화와 복호화를 같이 할 수 있는 방법의 암호화 기법입니다.
동일한 키로 암호화 및 복호화를 하기 때문에 공개키 방식에 비해 암호화가 빠르다는 장점이 있습니다.
하지만 클라이언트에서 암호화후 데이터를 전달하기 위해서는 키를 필요로 하는데, 키자체를 네트워크로 주고 받게 되면 전달과정에서 해킹의 위험이 있습니다.

3-2공개키 알고리즘

비대칭키는 암호화할 때와 복호화할 때의 키가 서로 다른 것을 의미합니다. 타인에게 노출되어서는 안되는 개인키와 누구나 알아도 되는 공개키가 쌍을 이루게 되고, 공개키로 암호화하는 경우와 개인키로 암호화하는 경우 두가지로 구분할 수 있습니다.

공개키로 암호화하는 경우

공개키로 암호화 하는 경우 개인키로만 복호화가 가능하며, 클라이언트가 서버로 데이터를 암호화 하여 전달하는 경우 사용됩니다.

개인키로 암호화하는 경우

개인키로 암호화 하는 경우 공개키로만 복호화가 가능하며, 전자서명을 통한 인증과정에서 주로 사용됩니다. 즉 데이터를 전달한 주체가 웹서버가 맞는지 인증하는 작업입니다.

비대칭키의 문제점

비대칭키의 암복호화는 대칭형 암호화에 비해 현저하게 느리기 때문에, HTTPS에서는 비대칭키를 이용해 대칭형 키를 사용자에게 전달하고, 이 대칭형키를 통해 암호화하여 데이터를 주고 받는 형식을 사용합니다.
이는 대칭형키를 안전하게 전달할 수 있다는 장점, 빠른 데이터 암복호화를 할 수 있다는 장점이 있습니다.

HTTPS를 적용을 위한 절차

인증기관

먼저 사이트에서 HTTPS를 사용하도록 설정하려면 신뢰할 수 있는 인증기관(CA)로 부터 보안인증서를 발급받아야 합니다. CA기관들은 본인들만의 고유한 비밀키를 가지고 있고 공개키는 누구든 열람가능 한 곳에 배포를 해두었습니다.

SSL 디지털 인증서

SSL인증서는 클라이언트와 서버간 통신을 제 3자가 보증해주는 전자화된 문서입니다. 클라이언트가 서버에 HTTPS요청을 하면 클라이언트에게 이 인증서 정보를 전달합니다. 클라이언트는 이 인증서정보가 신뢰할 수 있는 것인지를 검증 한 후에 다음 절차를 수행하게 됩니다.
보탕 SSL인증서는 인증기관에서 발급해준 인증서를 사용하게 됩니다.

브라우저에 등록된 CA의 공개키 리스트

일반적으로 각자의 브라우저에는 CA의 공개키 리스트가 이미 등록되어 있어 브라우저는 이 공개키를 기반으로 웹서버의 인증서가 올바른 인증서인지 확인 가능합니다.

SSL인증서 생성

HTTPS인증 방식을 사용하려면 웹서버는 SSL인증서를 미리 만들어 웹서버에 등록해두어야합니다.

먼저 서버는 아래의 정보를 CA에게 전달하여 인증서를 발급받습니다.
1. 서버의 정보(서버의 도메인, 인증서 발급 CA정보 등등 )
2. 서버측 공개키
서버의 정보는 브라우저에서 현재 통신하고 있는 서버가 인증서에 있는 서버와 같은지 비교를 통해 신뢰있는 통신을 하고 있다는 것을 보증하고, 서버측 공개키는 추후 데이터를 암호화하기 위하여 사용됩니다.

이후, CA는 웹서버로 부터 받은 정보를 비공개키를 이용해 암호화 후 웹서버에게 발급합니다.

웹서버는 브라우저에서 HTTPS요청을 할 경우 인증서를 브라우저에게 전달하기 위한 환경 세팅을 작업해둡니다.

SSL인증서가 웹서버를 보증하는 방법

위 정보들을 토대로 인증서가 서버의 신뢰성을 보장하는 매커니즘을 알아보자.

웹 브라우저가 서버에 접속할 떄 서버는 제일 먼저 인증서를 제공합니다. 브라우저는 이 인증서를 발급한 CA가 자신의 CA리스트에 있는지 확인합니다. 확인 결과 인증서의 CA정보가 브라우저의 CA리스트에 있다면 브라우저는 CA의 공개키를 이용해 웹서버에서 전달받은 인증서를 복호화 합니다. 여기서 CA의 공개키를 이용해 복호화 할 수 있다는 것은 CA의 비공개키에 의해 암호화 된 인증서라는 것을 의미합니다.
CA에의해 암호화 되었다는 것은 웹서버가 CA에 의해 검토가 된 신뢰할 만한(Authorization) 웹서버임을 의미합니다.

profile
개발자

1개의 댓글

comment-user-thumbnail
2022년 8월 19일

I like the item "개인키로 암호화하는 경우". This will be more convenient for my work. drift f1.

답글 달기