title:
  • Https에 대한 의문들
date:
  • 2024-12-05 17:08
tags:
  • Https

HTTPS란 무엇인가?

문득, HTTPS 프로토콜에 대한 의문이 들었습니다.

기존에는 HTTPS를 왜 사용하고, 권장하는지에 대해서는 대략적인 내용만 알고있었죠. 그리고 하지만 갑자기 의문이 들기 시작했습니다.

도대체 왜 사용을 권장하는걸까? 이 의문을 그냥 넘겨선 안된다고 생각이 들었습니다. 그래서 한번 찾아보기로했습니다.

HTTPS를 사용하는 이유

HTTP를 한번 살펴봅시다, HTTP는 데이터를 평문으로 전송합니다. 그렇기 때문에 ID 혹은 Password가 그대로 서버에 전송되어 이를 탈취시 그대로 볼수있는게 가능해집니다.

하지만 HTTPS는 요청전에 SSL / TLS 인증서를 요청을하여, 발급된 인증서를 검증하고 이를 통해 공개키를 생성하며, 공개키를 통해 세션키를 생성하여 세션키를 서버의 공개키로 암호화하여 서버에 전송하죠.

그렇기 때문에 기존에 보내던 데이터가 암호화되어 전송됩니다.

하지만 여기서 의문이 여러가지 들었습니다.

1. 통신시에 평문이 암호화된다면은 민감한 정보 자체가 자동으로 암호화 될텐데 DB에 저장할때 암호화가 필요한가?

2. 모든 정보가 암호화된다면 암호화가 필요없는 정보, 포스터 같은 정보도 암호화 된다는건데 이를 예외처리해서 좀더 성능을 높이는 방법은 없을까?

의문1 (DB 암호화는 그래도 필요하다.)

이건 바로 의문이 해결되었습니다. 서버와 클라이언트 사이에 통신할때만 암호화가 적용된다는 점에만 집중해서 생각해보면은 금방 해결되는 문제였죠. HTTPS를 통한 암호화는 양방향 통신시에서만 평문들이 암호화가 된다는것이고, DB는 이러한 암호화에 혜택을 누리지못해 DB가 노출되면 바로 노출된다라는겁니다.

하지만 곧바로 다시 의문이 들었습니다. 통신시에 암호화가 진행이된다면 클라이언트내에 있는 즉, Form에 있는 데이터가 노출되는것은 어떻게 해결해야할까요? 통신 이전까지는 평문으로있을텐데 이런것이 탈취된다면 큰 우려가 있을텐데 말이죠.

이것도 조금만 더 집중해서 생각해보면 금방 눈치챌수 있었습니다. 애초에 지금 HTTPS는 통신시에만 적용되는 범위이므로, 이를 HTTPS에서 고려해서는 안되는 문제라는거죠. 명백히 영역이 다른문제였습니다.

의문2 (신뢰도를 높이기 위한 필요한 비용지출이다.)

이 의문은 자료들을 찾아보고 나서야 어느정도 납득했습니다.

HTTPS와 SSL 인증서의 이해 HTTPS와 대칭키 및 비대칭키 암호화의 이해

그동안 제가 생각했던 암호화 방식들은 비대칭키 암호화였으므로 지수난수적으로 계산복잡도가 증가했었죠. 하지만 앞서 언급했다싶히, 처음 클라이언트에서 공개키를 사용하여 세션키라는 대칭키를 생성을합니다. 그렇기 때문에 어느정도 계산식이 고정되어 맞는 해석식을 찾는 과정을 거치지 않아 시간복잡도가 줄어들게됩니다.

그러한 최적화과정이 존재하기 때문에 어느정도는 허용할만한 비용지출이라는것은 이해를했습니다. 하지만 여전히 전 암호화가 필요없는 부분에 대해서 암호화를 적용시킨다는것이 납득가지 않았습니다. 우선 개인정보를 취급하는 사이트는 SSL 적용을 해야한다는것은 이해하고 있으니 넘어갑시다.

SSL/TLS이 모든 평문을 암호화하는 이유

HTTPS가 모든 데이터를 암호화하는 이유는 중간에 데이터를 가로챌 수 있는 해커로부터 보호하기 위함이죠. 하지만 이런 뻔한 이야기로는 납득이 가지 않았습니다. 그래서 모든것을 암호화할때 누리는 혜택을 생각해보기로 했습니다.

  1. 모든 데이터가 암호화된다면 민감한 정보가 포함되어있는 레이어가 어딘지부터 찾아야하기 때문에 공격자 입장에서는 계산복잡도가 늘어나게된다.
  2. 모든 데이터가 암호화된다면 변조시도를 쉽게 감지 할 수 있다. 예를들어, 변조를 시도하기 위해 여러가지 시도를 하다보면 반드시 오류가 발생하게 될것이다. 이를 잡아내어 색출해내면 아주 방어하기 용이해진다.

여러가지 이유들을 늘어놓고 있지만 압축해서 보자면은 2가지의 혜택을 누릴수 있죠. 이러한 이유 때문에 모든것을 암호화하기 때문에 HTTPS가 HTTP보다 성능이 더 안좋을것이라고 생각했었습니다. 하지만 다음 자료를 보고서는 저의 생각이 일부만 옳다는것을 알았습니다.

HTTPS는 HTTP보다 빠르다

그리고 저 글을 보면서 확실히 왜 통신시 모든 정보를 암호화를 해야하는지 더 확실히 알게되었습니다. 아주 좋은글이니 한번쯤 읽어보는걸 권장합니다. 하지만 제목을 그대로 믿진마세요. 확실한 사실은 HTTP가 HTTPS보다 빠릅니다. 암호화하는 과정이 들어간 HTTPS가 당연히 느릴수 밖에 없습니다. 하지만 여러가지 상황을 고려해서 작성된 글입니다.

HTTP vs HTTPS Test Site

인증서의 비용이 꺼린다.

사실 이 글을 쓰기 시작한 이유이기도 합니다. 얼마전에 운영하고 있는 서버에 HTTPS를 도입하려고 시도를 했습니다. 하지만 HTTPS 인증서를 발급받기 위해서는 일정 기간마다 비용지불이 필요했고, 저는 이것이 매우꺼렸습니다. 그렇기 때문에 보안의 중요성을 알면서도 눈감고 넘어갔었죠.

동시에 이런 생각이들었습니다. HTTP가 성공한 이유중 하나가 오픈소스였기 때문에 성공한것인데 HTTPS는 그것을 보안한 프로토콜이면서 왜 무료로 사용이 불가능한가라는 의문이였죠. 물론 공인된 기관에서 발급하기 때문에 그 기관이 끊임없이 개선해나가기 위한 비용을 지불하기 위함이라는것은 이해하고있지만 저 같은 최대한 비용을 억제하면서 운용해야하는 개발자에게는 큰 걸림돌중 하나입니다.

그리고 이러한 문제점을 해결해주는 기관들이 등장하기 시작했습니다. 대표적으로 Let's Encrypt가 있습니다. 아주 쉽고, 그리고 자동적으로 HTTPS 인증서를 발급받을 수 있죠.

결론

HTTPS는 단순한 통신 프로토콜이 아니라, 현대의 관점에서 안정성과 신뢰성을 구축하는 중요한 프로토콜입니다.

데이터 전송 시 암호화를 통해 사용자의 민감한 정보를 보호하고, 서버 인증을 통해 신뢰할 수 있는 연결을 제공하죠. 물론 이러한 신뢰성을 구축하기 위해서는 비용이 발생하는 단점이 있긴 하지만, 이러한 단점을 해결하기위해 Let's Encrypt와 같은 무료 인증서 발급 기관이 등장하여 이러한 장벽을 낮추고 있습니다.

결론적으로, HTTPS는 웹 환경에서 기초적으로 도입해야 하는 필수적으로 고려할 요소로, 현대의 관점에서는 신뢰성을 구축하기 위해서는 반드시 고려해야할 요소라고 할 수 있습니다.