[Network] 왜 HTTP대신 HTTPS를 써야해?

김성훈·2023년 6월 15일

아주 간략하게 알아보는 포스팅이므로
깊은 지식이나, 원리를 알고싶으시다면 다른 자료를 더 찾아보셔야 합니다..!




일반적으로 http보단 https를 쓰는게 더 좋다는것을 알고있을 것이다.
그 이유로는 단연 '보안'이겠지만 보안의 어느 측면이 좋을까? 과연 더 안전하긴 한걸까?
이러한 궁금증이 들기 마련이다.

HTTP란?

HyperText Transfer Protocol의 준말로 클라이언트와 서버 사이에 이루어지는
요청및 응답(request/response) 프로토콜이다.

간단히 말해서 인터넷을 작동시키는 중추 역할을 하고있다.
클라이언트(웹브라우저)가 HTTP를 통해 웹페이지 또는 그림같은 데이터를 요청하면
서버가 응답하여 필요한 정보를 사용자에게 전달한다.

  • HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해 해석이 된다.

  • TCP/ IP를 이용하는 응용 프로토콜이다.

  • HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜이다.
    (이러한 단점을 해결하기 위해 Cookie와 Session이 등장하였다.)

  • HTTP는 연결을 유지하지 않는 프로토콜이기 때문에 요청/응답 방식으로 동작한다.

HTTPS란?

Hypertext Transfer Protocol Secure의 준말.
HTTP와 동일하게 동작하나 서버와 주고받는 데이터를 암호화하여
데이터가 탈취되거나 해킹되는 것을 막는다.

HTTPS(https://)는 SSL(Secure Socket Layer) 인증서를 사용하며 SSL(또는 TLS) 인증서는 일반 HTTP 요청 및 응답을 암호화한다.

탈취당한다고?

Wireshark라는 패킷을 볼 수 있는 Tool을 이용하여
HTTP가 어떻게 통신하고 있는지 살펴보자.
우선 spring boot를 통해서 임의의 사이트를 만들어준다.
실제론 서버와 클라이언트가 연결되기 전에 3way-handshake과정을
거치지만 추후 따로 자세하게 다루겠다.
로그인을 누르게 되면 위 처럼 로그인을 위한 페이지로 이동한다.
wireshark에서 볼 수 있는 패킷들인데 Source와 Destination에 있는 ::1은
127.0.0.1과 같은 루프 백 주소를 나타내므로 로컬에서 클라이언트와 서버를 둘 다
실행하고 있기 때문에 출발지와 목적지가 똑같다.

패킷을 자세하게 뜯어볼 수도 있는데 출발지와 목적지 그 외에 헤더의 내용과 어떤 데이터를 보내려고 했는지도 알 수 있다.

예전에 cisco로 가상 네트워크를 구성하고 Wireshark로 패킷을 감시하며 데이터를 탈취하거나
다른 Tool로 패킷을 변조하는 실습도 했었는데, 데이터가 대놓고 드러나있으면 위험하다.

실제로 다른 사이트나 운영하는 곳에 실습하면 불법이니
할거면 가상의 환경을 만들어 진행해보자!

어쨌든 본론으로 돌아와서 로그인을 진행해보자! 위처럼 ID와 PASSWD를 넣고 로그인을 하면
내가 입력했던 비밀번호와 아이디가 그대로 노출된다. 아주 치명적이지 않은가?


그래서 HTTPS

이번에는 HTTPS를 적용시켜서 데이터가 어떻게 전달되는지 확인해보자.

keytool -genkey -alias spring -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 4000

우선 key를 만들어주자. Spring Boot기준으로 프로젝트의 root폴더에서 실행하면 된다.

server.ssl.key-store:keystore.p12
server.ssl.key-store-type=PKCS12
server.ssl.key-store-password=passwd

applications.properties 파일에 위의 내용을 입력하고 서버를 재기동해보자.
application.yml 파일에서 적용시켜보려 했는데 동작은 되나
https로 반영은 안되어서 properties파일로 작성했다.

이제 http로 접근하면 올바르지 않은 접근이라고 뜨게되며 접속이 불가능하다.


https로 다시 접속하면 프로토콜이 http대신 tlsv1.3으로 변경이 되어있음을 볼 수 있는데
올바르게 https가 작동하고 있음을 패킷을 통해 알 수 있다.

이제 다시 로그인을 하고 패킷을 살펴보자



아까 ID와 PASSWD가 노출되었던 부분을 포함해 형식도 감춰진것을 볼 수 있다.
보안적 측면에서는 확실히 HTTP보다 훨씬 안전하다고 할 수 있다.

때문에 https가 거의 필수 불가결이며, 구글에서도 이를 권장하고 사용자가 검색했을 때
https가 아닌 사이트의 노출빈도를 낮춰버리는 알고리즘도 도입했다고 한다.
현재는 약 94~96% 정도가 암호화된 사이트이며 100%가 목표라고 하더라
https://transparencyreport.google.com/https/overview?hl=en

profile
끊임없는 노력

0개의 댓글