HTTP(Hypertext Transfer Protocol)는 클라이언트와 서버 간 HTML과 같은 하이퍼미디어 문서를 전송하기 위한 통신 규칙 세트 또는 프로토콜이다.
Ex) 사용자가 웹 사이트에 방문해서 웹 브라우저를 통해 웹서버에 HTTP 요청을 전송하면 웹서버에서는 HTTP 응답을 한다.
HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동하며 80포트에서 사용한다. HTTP는 상태를 가지고 있지 않는 Stateless 프로토콜이며 Start Line(Status Line), Headers, Body 등으로 구성된다.
HTTP는 무상태성이라는 장점으로 서버확장성이 높다는 장점이 있지만 치명적인 보안 단점이 있다.
데이터를 주고 받을 때 평문 데이터를 전송하는 프로토콜이기 때문에 비밀번호나 주민등록번호를 주고 받으면 제 3자가 정보를 조회할 수 있다는 점이다. 이러한 문제를 해결하기 위해 등장한 것이 HTTPS다.
HTTPS는 HTTP에 SSL을 사용하여 데이터 암호화가 추가된 프로토콜이다. HTTPS는 HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 암호화를 지원하고 있다.
HTTP 자체를 암호화 하는 것이 아닌 HTTP 메세지 BODY를 암호화 한는 것이다.
Secure Sokects Layer의 약자이며 웹 서버와 웹 브라우저간 보안을 위해 만든 프로토콜이다.
대칭키/ 비대칭 기반을 사용한다.
앞서 언급하였듯이 SLL을 사용하는 HTTPS는 대칭키 암호화 방식과 비대칭키 암호화 방식을 모두 사용하고 있다. 각각의 암호화 방식은 다음과 같다.
대칭키 암호화
비대칭키 암호화
암호화를 공개키로 하느냐 개인키로 하느냐에 따라 얻는 효과가 다른데, 공개키와 개인키로 암호화하면 각각 다음과 같은 효과를 얻을 수 있다.
공개키 암호화: 공개키로 암호화를 하면 개인키로만 복호화할 수 있다.
-> 개인키는 나만 가지고 있으므로, 나만 볼 수 있다.
개인키 암호화: 개인키로 암호화하면 공개키로만 복호화할 수 있다.
-> 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장할 수 있다.
HTTPS는 대칭키 암호화와 비대칭키 암호화를 모두 사용하여 빠른 연산 속도와 안정성을 모두 얻고 있다.
처음 연결을 성립하여 안전하게 세션키를 공유하는 과정(HTTPS 연결 과정 Hand-Shaking)에서 비대칭키가 사용되는 것이고, 이후에 데이터를 교환하는 과정에서 빠른 연산 속도를 위해 대칭키가 사용되는 것이다
그렇다면 가장 중요한 내용인 HTTPS의 동작 방식에 대해서 알아보자.
HTTPS의 경우 웹 브라우저와 웹 서버말고 추가적으로 CA(Certificate Authority)라는 인증 기관이 추가되어 웹 브라우저, 웹 서버, CA 세개의 주체가 키를 주고 받으며 하나의 대칭키를 생성한다고 생각할 수 있다.
99CORN- HTTP Request/Response 구조
https://velog.io/@hyoribogo/what-is-the-defference-between-http-and-https
https://mangkyu.tistory.com/98
https://rnclf1005.tistory.com/11
https://www.youtube.com/watch?v=wPdH7lJ8jf0&t=339s