HTTPS란?
이번 포스팅은 HTTPS에 대해 알아보려한다.
HTTPS (Hyper Text Transfer Protocol Secure)
웹에서 HTML과 같은 문서를 통해 웹브라우저가 웹서버에 요청할때의 규약이 HTTP
이다. 기본적으로 80번 포트로 서비스를 요청하면 브라우저가 TCP 80번 포트를 통해 서버와 연결되어 통신을 하게 된다. 여기서 HTTP는 텍스트 데이터를 주고 받기에 데이터의 유출이 발생할 수 있다.
위와 같은 문제를 해결하기위해 등장한 프로토콜이 HTTPS
이다. HTTP와 동일하지만 데이터를 암호화하여 통신하기 때문에 보다 안전한다.
HTTPS
는 SSL(TLS) 프로토콜을 통해 데이터를 암호화하며, 기본 포트는 443 포트이다.
암호화 방법
비대칭키
방식으로 대칭키
를 전달하여, 속도가 빠른 대칭키로 통신하는 방식을 사용한다. 즉, 비대칭키, 대칭키 모두 사용한다.
https://rachel-kwak.github.io/2021/03/08/HTTPS.html
위 그림은 대칭키 방식에서의 암호화
및 전자서명
방식을 나타낸다.
동작 방식
1. 서버는 공개키와, 개인키를 생성하여 신뢰할 수 있는 인증기관(CA)
에 서버의 정보와 공개키를 제공한다.
2, 3. 그에 따라 CA는 서버의 데이터(정보와 서버의 공개키)를 검증한 후에, 기관의 개인키로 서버의 정보를 암호화(전자서명)하여 인증서를 만들어 서버로 반환한다. 서버는 이를 인증서
로 사용하게 된다.
4. 인증기관은 클라이언트에 기관의 공개키를 제공한다.
1, 2. 클라이언트가 서버에 접속하면 서버가 갖고 있던(기관의 개인키로 암호화 된) 인증서를 반환한다.
3. 클라이언트는 기관의 공개키로 서버에서 받은 인증서를 해독하여 검증한다(전자서명). 이를 통해 서버의 공개키
를 얻는다.
4, 5. 서버의 공개키를 이용하여 통신에 이용할 대칭키
를 암호화한 후 서버로 전송한다.
6. 서버는 서버의 개인키로 해독하여 클라이언트에서 전송한 대칭키를 얻게된다. 이를 통해 대칭키
로 데이터를 암호화하여 통신할 수 있게 된다.
장단점
HTTPS는 무결성을 보장한다.
즉, 클라이언트와 서버간의 데이터 조작이나, 유출이되어도 안전하다.
또한 SEO(검색엔진최적화) 관련하여, 검색 시 상위 노출되는 기준 중 하나가 보안요소이다.
다만 모든 데이터를 암호화하여 주고받으므로 부하가 발생하기에 데이터의 중요도에따라 HTTP와 HTTPS를 사용하는 경우도있다. 그리고 신뢰할 수 있는 CA가 아닌 기관
에서도 인증서를 받을 수 있기에 주의가 필요하다.
결론
개념은 개념이고! 실제로 HTTPS를 적용해보면 조금 더 와닿을 것 같다. 통신 시에 위에 방식이 실제로 어떻게 진행되는지 WireShark 등의 패킷 프로그램
을 통해 보면 흥미로울 것이다. 추후에 진행하고 있는 프로젝트에 실제 적용해보도록 해야겠다😁