HTTP
에 대해서는 이전 문서에서 다루었으니 해당 문서를 통해 확인하자.
HTTPS
는 HTTP
프로토콜을 암호화한 것
client와 server간의 통신, 즉 request와 response를 SSL
혹은 TLS
를 통해 암호화함
HTTPS = HTTP + SSL or TLS
HTTPS는 암호화된 HTTP인 것이지 전혀 다른 메커니즘이 아니다.
-> 일반적인 HTTP
의 request와 response를 암호화한 것 (TLS 혹은 SSL을 통해)
어떻게 하는지는 모르겠지만, 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==
```
https
를 올바르게 이용할 수 있다.client와 server가 주고받는 data를 읽을 수 없게 암호화하는 기법
공개키 암호화 방식
간단히 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인데, 구입 후 적용 절차까지 꽤나 자세하게 문서화 해두었으니 자세한 내용이 궁금하다면 확인해보자.
HTTPS
를 이용하려면 인증서도 구매해야하고, domain도 https로 바꾸어줘야한다.
상기 SSL TLS 링크의 설명을 보면 알겠지만, 굉장히 복잡하다.
돈도 들고 귀찮은데 그냥 http 쓰면 안될까?
답은 상관없다.
대신 당신이 배포한 웹에 접근한 유저는 매번 다음과 같은 Alert
을 확인할 것이다. (적어도 크롬에서는)
그렇다면 address만 https로 붙이고 TLS/SSL 인증서는 구매하지 않았으면 어떻게 될까?
이젠 warning이 대문짝하게 박힌다.
더 들어가기 싫다.
http를 고수한다면 유저에게 진입장벽을 하나 선물하는 셈이니 진지하게 웹서비스를 운영하고자 한다면 certificate을 꼭 받자.
HTTPS 인증서를 구매한 웹이지만 address를 고치지 않은 경우는 유저가 직접 url을 https로 고쳐서 접근하면 안전하게 브라우징할 수 있다.
끗