HTTP vs HTTPS

Leo Bang·2021년 9월 8일
0

1. HTTP vs HTTPS

HTTP에 대해서는 이전 문서에서 다루었으니 해당 문서를 통해 확인하자.


1.1 HTTPS 란

  • HTTPSHTTP프로토콜을 암호화한 것

  • client와 server간의 통신, 즉 request와 response를 SSL 혹은 TLS를 통해 암호화함

  • HTTPS = HTTP + SSL or TLS

  • HTTPS는 암호화된 HTTP인 것이지 전혀 다른 메커니즘이 아니다.

    -> 일반적인 HTTP의 request와 response를 암호화한 것 (TLS 혹은 SSL을 통해)


1.2 HTTPS를 이용하는 이유

  • 어떻게 하는지는 모르겠지만, client - server 상호작용의 서드파티가 오고가는 데이터를 빼올 수 있다고 한다.

  • 이 때, HTTP의 경우 암호화가 되어있지 않기 때문에 서드파티가 탈취한 데이터를 악용할 수 있지만, HTTPS 프로토콜을 이용하여 통신한다면 주고 받는 resouce들이 암호화된 상태이기 때문에 서드파티가 탈취하더라도 악용하기 힘들다.

    • HTTP의 경우 악의적인 서드파티 (제 3자)가 다음을 확인할 수 있다면,

      GET /hello.txt HTTP/1.1
      User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
      Host: www.example.com
      Accept-Language: en
    • HTTPS의 경우 서드파티는 다음과 같은 암호화된 request를 확인하게 된다

      ```
      t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZdZUZHpzbbcqmSW1+3xXGsERHg9YDmpYk0VVDiRvw1H5miNieJeJ/FNUjgH0BmVRWII6+T4MnDwmCMZUI/orxP3HGwYCSIvyzS3MpmmSe4iaWKCOHQ==
      ```


2. SSL과 TLS Certificate이란

  • SSL, 혹은 TLS 기법을 이용한 인증서로, client - server의 상호작용을 제 3자가 보증해주는 전자화된 문서이다.
  • client가 서버에 접속한 직후, server는 client에게 해당 인증서 정보를 전달한다.
  • client는 이 인증서 정보가 신뢰할 수 있는 것인지 검증한 후, 다음 절차를 수행한다.
  • 인증서 발급처에서 유료로 구매할 수 있고, 각 발급처의 인증서 상품마다 조금씩 조건들이 다르다.
  • 후술하겠지만 해당 인증서를 구매해야지 https를 올바르게 이용할 수 있다.

2.1 SSL (Secret Sockets Layer)


2.2 TLS (Transport Layer Security)

  • SSL의 업그레이드 버전 (더 안전함 + 최신기술)
  • 역시 공개키 암호화 방식
  • security certificates에 대한 일반적인 명칭으로 SSL을 여전히 많이 이용하지만, SSL 인증서를 구매할 경우 실제로 구매하는 상품은 TLS 일 확률이 높다. (ECC, RSA나 DSA 등의 암호화를 옵션으로한)

3. 그럼 인증서는 어떻게 구매하는 걸까?

간단히 SSL certificate를 구글링하다보면 인증서를 발급해주는 웹을 찾을수 있다.

(해당 인증서 발급처는 digicert)


가격대는 천차만별이고 free ssl certificate도 찾아보면 있다. (진짜 무료인지는 모르겠는데 대충 찾아봐도 꽤 있다.)

다만 무료를 이용할 경우 인증서 만료기간이 굉장히 짧아 자주 갱신해주어야 하며, chrome에서는 not secure 경고를 띄울수도 있다고 한다.


아무튼, 인증서 발급처에서 인증서를 구매하고 여러가지 절차를 거친 후 인증서를 설치하고 또 몇몇 절차를 거치고.... 마지막에 domain을 https로 바꾸어주면 https 프로토콜을 이용한 웹사이트가 되는 것이다.


https를 domain으로 이용하고, 또 https 인증서까지 설치한 웹이라면 이렇게 자물쇠가 뜬다. (chrome 기준)


자물쇠를 클릭하면 이렇게 HTTPS가 이용되었다는 안내와 인증서 발급 대상에 대한 정보가 나온다.


발급대상을 클릭하면, 발급처와 발급받은 인증서에 대한 specification이 나와있으니 궁금하다면 확인하자.



발급 과정이 조금 더 궁금하다면..

https://opentutorials.org/course/228/4894

아까 SSL 항목에 넣은 link인데, 구입 후 적용 절차까지 꽤나 자세하게 문서화 해두었으니 자세한 내용이 궁금하다면 확인해보자.



4. Is HTTP insecure?

  • 그냥 웹 브라우징할 때는 nope.
  • 그러나, 은행에 로그인을 하거나 결제정보가 오고가는 등 민감한 정보를 다룰 때는 insecure하다고 할 수 있다.



5. 그냥 HTTP 쓰면 안돼?

HTTPS를 이용하려면 인증서도 구매해야하고, domain도 https로 바꾸어줘야한다.

상기 SSL TLS 링크의 설명을 보면 알겠지만, 굉장히 복잡하다.

돈도 들고 귀찮은데 그냥 http 쓰면 안될까?


답은 상관없다.

대신 당신이 배포한 웹에 접근한 유저는 매번 다음과 같은 Alert을 확인할 것이다. (적어도 크롬에서는)


그렇다면 address만 https로 붙이고 TLS/SSL 인증서는 구매하지 않았으면 어떻게 될까?


이젠 warning이 대문짝하게 박힌다.

더 들어가기 싫다.

http를 고수한다면 유저에게 진입장벽을 하나 선물하는 셈이니 진지하게 웹서비스를 운영하고자 한다면 certificate을 꼭 받자.



추가

HTTPS 인증서를 구매한 웹이지만 address를 고치지 않은 경우는 유저가 직접 url을 https로 고쳐서 접근하면 안전하게 브라우징할 수 있다.



References

profile
me, myself and code

0개의 댓글