[Web] HTTPS란

DongDong·2022년 11월 20일
0

Web에 대한 이해

목록 보기
1/3
post-thumbnail

HTTPS란?

HTTP의 보안이 강화된 버전으로 HTTP를 기반으로 하여 웹 서버와 통신을 하되 암호화 통신을 위한 별도의 협의 과정을 거치게 되며 협의과정에서 SSL/TLS 프로토콜을 사용하여 암호화하게 됩니다.

HTTPS가 왜 나왔을까?

현재 우리가 쓰는 웹은 원래 정보의 전달만을 목적으로 세상에 나왔다는 것을 알고계셨나요?
웹이 폭발적인 성장과 발전을 이루기 전까지는 웹에서 개인정보나 민감정보 등을 다루는 일이 많지 않았습니다. 하지만 현재 웹에서 은행거래나 휴대폰 인증 등 많은 것들을 웹에서 할 수 있게 되었고 그에 따라 보안이 큰 화두로 떠오르게 되었습니다.
기존 HTTP 통신은 암호화 수준이 낮아서 클라이언트와 서버가 통신을 할 때
제 3자가 그 사이에서 HTTP 메세지를 도청할 수 있습니다.
만약 은행이나 거래사이트와 같은 곳에서 메세지가 도청된다면 우리는 더 이상 해당 사이트를 신뢰할 수 없게 될 것입니다. 결국 HTTP 메세지를 지켜내야했고 그에 따라 SSL 인증서라는 것을 개발하게 되었습니다.

SSL과 TLS를 이용한 HTTP 통신을 HTTPS로 부르며

SSL ( Secure Socket Layer ) : 전송되는 데이터를 암호화하는 계층
TLS : SSL의 업데이트 버전이며 명칭만 다르다고 볼 수 있는데, SSL을 개발한 Netscape가 업데이트에 참여하지 않게 되어 소유권 변경을 위해 다른 명칭을 사용했다고 한다.

HTTPS의 통신은 클라이언트에서 서버로 통신할 때 SSL을 거치며 암호화가 되고
서버는 클라이언트가 보낸 메세지를 받을 때 SSL을 거쳐서 복호화가 되어
중간에서 제 3자가 http 통신을 가로채거나 들여다볼 수 없게 됩니다.

HTTP는 TCP/IP 기반의 전송 프로토콜이며 SSL/TLS가 해당 부분을 싹 덮어줍니다. :)

HTTPS가 무엇이고 왜 사용하는지는 알았는데, 동작 방식이 궁금하지 않으신가요?

네 ,, 저는 요만큼도 궁금하지 않습니다.

HTTPS의 동작방식에 대해서 이야기 하기 전, 키에 대하여 사전지식이 있으면 좋을 것 같습니다.
그래서 암호화/복호화에 사용되는 키의 종류에 대해서 먼저 이야기하도록 하겠습니다 :)

사용되는 키의 종류

SSL 적용에 사용되는 키는 크게 3가지가 있습니다.

1) 공개키
말 그대로 공개해도 상관없는 키이며 키의 발행자 뿐만 아니라 제 3자가 알아도 상관이 없는 키 입니다. 개인키와 쌍을 이루어 존재하며 보통 암호화 할 때 사용합니다.
(복호화할 때도 사용할 수 있음.)

2) 개인키
키의 발행자만 알고있어야하는 키이며 보통 복호화할 때 사용합니다.
(암호화할 때도 사용할 수 있음.)

공개키와 개인키는 서로 쌍을 이루어 존재합니다. 둘은 영원한 단짝이라고 할 수 있어요.

저는 문득 공개키와 개인키는 주민등록번호와 비슷하다고 생각이 들었습니다.
공개키는 주민등록번호 앞자리에 해당하고 개인키는 주민등록번호 뒷자리에 해당한다고 생각하면 앞자리는 알려져도 상관이 없지만 뒷자리는 알려지면 곤란하죠 :)
또한 공개키와 개인키는 서로 쌍을 이루어 존재하기 때문에 주민등록번호와 비슷하다고 생각이 들었어요. 그냥 그렇다구요 ..!

3) 대칭키
위의 공개키/개인키처럼 암호화/복호화에 각각 다른 키를 사용하는 것이 아니고
대칭키 하나만으로 암호화/복호화 하는데 사용합니다.

사용되는 키의 종류를 알아보았으니, 이제 키에 따른 암호화 방식에 대해서 이야기하고 넘어가볼게요.

키에 따른 암호화 방식

공개키 암호화란?

  • 서로 다른 키로 암복호화를 수행하는 방법이며 비대칭 키 방식으로도 불린다.
  • 데이터 암호화 할 떄는 공개키 복호화할 때는 개인키를 사용한다.
  • 공개키로 암호화된 데이터는 오직 개인키로만 복호화할 수 있다.
  • 암복호화에 다른 키를 사용한다.
  • 암복호화가 느리다.
    ( 암복호화 알고리즘의 차이로 인해 공개키 암호화 방식이 대칭키 암호화 방식보다 더 긴 길이의 키가 필요하다. )
  • 서로 키를 나누지 않아도 된다.

대칭키 암호화란?

  • 동일한 키로 암복호화를 수행하는 방법
  • 암복호화가 빠르다.
  • 서로 키를 나누는 과정이 있다.
  • 누구든지 암호화에 이용된 키를 가지고 있다면 해당 데이터를 쉽게 복호화할 수 있음

HTTPS의 동작 과정

이제 HTTPS가 어떻게 동작하는지 이야기 해보도록 하겠습니다. :)

일단, 클라이언트는 서버를 믿지않아요.
그래서 클라이언트와 서버는 서로 본격적으로 통신하기 전에 간을 본답니다?

클라이언트가 사이트에 접속하기까지의 과정

클라이언트는 서버를 믿지 않습니다. 그래서 이 둘은 일종의 탐색 과정을 거치게 됩니다.
이 과정을 3-way-handShake라고 합니다.

  • 먼저 클라이언트는 어떤 랜덤한 값을 서버로 보냅니다.
  • 이걸 받은 서버 또한 클라이언트 측으로 어떤 랜덤한 값과 해당 서버의 인증서를 클라이언트로 보냅니다. 이걸로 클라이언트와 서버간 악수를 한 것입니다.
  • 이제 클라이언트는 해당 서버의 인증서가 진짜인지 아닌지 아래와 같이 판단하게 됩니다.
    • 브라우저에 내장된 CA들의 정보를 비대칭키 시스템을 통해 확인하게 됩니다.
    • CA( 제 3의 인증기관 )의 인증을 받은 인증서들은 해당 CA의 개인키로 암호화가 되어있습니다.
      서버측에서 보낸 인증서가 진짜라면 브라우저의 저장된 CA의 공개키로 복호화가 가능하겠죠?
    • 이 공개키로 복호화할 수 있는 인증서를 발급할 수 있는건 그에 대응하는 개인키를 가진 CA 뿐일테니까요.
    • 성공적으로 복호화된 인증서에는 요청한 서버의 공개키가 포함되어 있습니다.
    • 이제 클라이언트는 서버를 신뢰하게 됩니다.
  • 서로를 신뢰하게 된 클라이언트와 서버는 대칭 키 방식과 비대칭 키 방식을 혼합하여 사용하게 됩니다. ( 비대칭 키 방식만으로 모든 과정을 암복호화 하게되면 많은 비용이 들기 때문)
  • 그래서 이 데이터는 대칭키로 암호화를 진행하며 해당 대칭키를 공유할 때 비대칭 키를 사용하게 됩니다.
  • 핸드쉐이크 과정에서 생성된 두 무작위 데이터를 혼합해서 어떠한 임시 키를 만들어냅니다.
  • 이 임시키는 서버의 공개키로 암호화돼서 서버로 보내진 다음 양쪽에서 일련의 과정을 거치며 동일한 대칭키가 생성됩니다.
  • 이제 동일한 대칭키를 통해서 클라이언트와 서버간 안전한 통신을 보장받게 됩니다.

잠깐 ! 그렇다면 클라이언트가 접속한 사이트가 인증된 사이트인지 어떻게 구분할 수 있을까?

제 3의 인증기관을 통해 알 수 있습니다!
HTTPS 사이트들은 사이트 인증서가 필요하며
사이트 인증서란 인증기관이 사이트에게 발급하는 인증서를 의미합니다.
사이트는 한 쌍의 공개키와 개인키를 생성하고 인증기관에게 사이트의 정보와 사이트 공개키를 전달합니다.
인증기관에서는 요청한 사이트에게 사이트 인증서를 발급하기 전, 전달받은 데이터를 검증하고 인증기관에서 성공적으로 검증을 완료하면 인증기관은 사이트 인증서를 생성하기 위해
자신의 개인키로 암호화를 하게됩니다.
서명을 하게되면 사이트 인증서(SSL 인증서)가 생성되고 생성한 인증서를 사이트에게 전달합니다.
그리고 인증기관은 사용자에게 자신의 공개키를 전달하는 것이죠.
사용자가 인증기관으로부터 전달받은 인증기관의 공개키는 사용자 브라우저에 내장되며 위 과정에 있던 CA의 공개키로 복호화 하는 과정이 가능하게 됩니다.

그렇다면 HTTPS는 항상 좋을까?

먼저, HTTPS는 HTTP보다 느립니다.
왜냐하면 서로 간을 봐야하기 때문이죠.

  • 서로 키를 교환하는 과정이 있다.
  • 암복호화를 하는 과정에서 시간이 걸린다.

하지만 쓰는게 옳다고 말할 수 있습니다.

  • HTTPS는 시간이 지나며 많이 개선이 되었습니다.
  • HTTP 2.0에서는 TLS가 필수적으로 사용되어야 합니다.
  • 검색 엔진 최적화(SEO)에서 이점을 얻을 수 있습니다.
    (구글 검색 엔진은 HTTPS가 적용되어 있는 사이트에 가산점을 부여한다고 합니다.)
  • 마지막 이유는 가장 중요한 이유는 무엇보다 보안입니다.

HTTPS를 적용한다고 모든 보안적인 이슈가 해결되는 것은 아니지만
기본적으로 갖추어야 할 스펙이라고 생각됩니다.
따라서 HTTPS를 적용할 수 있다면 적용하는 것이 좋아보입니다.

마치며

네트워크 상에서 클라이언트와 서버가 서로 IP Packet을 주고받는데,
이 때 패킷에 어떠한 암호화 알고리즘을 사용할 것인지 정하고, 인증서를 전달하고, 암호화할 대칭키, 등등 정보가 담겨져있다고 합니다.
해당 부분까지는 미처 포스팅하지 못했는데, 추후 시간이 된다면 포스팅하도록 하겠습니다 :)

profile
중요한건 꺾이지 않는 마음

1개의 댓글

comment-user-thumbnail
2022년 11월 23일

우뚜켕

답글 달기