HTTPS란 기존의 HTTP프로토콜에 SSL이라는 Security Layer를 한층 올린 통신 프로토콜이다.
기본적인 통신 원리는 기존의 HTTP와 동일하고, end points간에 data를 주고받을 때 좀더 안전하게 데이터를 주고받을 수 있게 한다.
(Hypertext Transfer Protocol)
HyperText인 html을 전송하기 위한 통신규약이다.
HTTP는 2개의 endpoints(john 과 mail)가 중요한 정보를 주고 받는 상황에서 악의적인 공격자가 중요한 정보를 탈취해 악용할 가능성이 있다.
(Hypertext Transfer Protocol Secure)
위의 HTTP 문제점을 개선한것이 HTTPS이다.
HTTPS는 데이터를 endpoints 끼리 약속한 secret key로 암호화해서 전송하기 때문에 악의적인 공격자가 정보를 탈취하더라도 무슨 내용인지 알 수 없다.
HTTPS의 통신의 보안은 SSL Certificates를 통해 보장된다.
SSL Certificate란 클라이언트와 서버간의 통신을 제 3자가 보증을 해주는 문서이다.
클라이언트 -> 서버 (접속)
서버 -> 클라이언트 (인증서 전달)
클라리언트는 전달받은 인증서를 확인하고 신뢰할 수 있는 사람인지 확인한 후 데이터를 전송한다.
SSL Certificates 종류
1. Self-Signed : 사용자 본인이 생성한 SSL Certificate로 개발 단계에서 사용된다.
2. Signed by Trusted Authority : Symantex,Comodo와 같이 인증된 기관이 발급해준 SSL Certificate로 실제 운영 환경에서 사용된다.
1. client가 application으로 https request한다.
2. application은 client에게 SSL인증서와 public key를 전달해 정산적인 application임을 인증한다.
3. client는 전달받은 인증서가 믿을만한 기관으로부터 발급받은 SSL 인증서인지 등을 확인한다.
SSL이 정상적임이 인증이 된 경우 브라우저가 application에 session key를 전달한다.
4. 이후 client와 application 사이의 모든 communication은 전달한 session key를 사용해 암호화 된다.
가능하면 꼭 HTTPS를 사용하자
https://youtu.be/cle8avHVCQY
https://minholee93.tistory.com/entry/Spring-Security-SSL-HTTPS?category=924032
https://goodgid.github.io/TLS-SSL/