HTTP란 Hypertext Transfer Protocol로,
서로 다른 시스템들 사이에서 통신을 주고받게 하는 가장 기본적인 프로토콜이다.
서버에서 브라우저로 데이터를 전송하는 용도로 가장 많이 사용한다.
HTTPS란 Hypertext Transfer Protocol Secure로,
SSL(보안소켓계층)을 사용한다.
SSL은 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버와 브라우저가 민감한 정보를 주고받을 때 해당 정보가 도난당하는 것을 막아준다.
기존의 http방식에서 사용자가 서버로 '뭐해'라는 메시지(패킷)를 보냈다고 하면 http는 '뭐해' 그대로의 문자를 보낸다.
그러나 https방식에서는 사용자가 '뭐해'라는 메시지를 똑같이 보내더라도 암호화된 '00da0910393'로 암호화되어서 전송된다.
이것에 의해 해커가 중간에서 가로채더라도 그 메시지를 알 수 없게 된다.
구글은 HTTPS 사이트에게 가산점을 줘 검색엔진에 더 잘 노출될 수 있게 해준다. AMP를 만들 떄 HTTPS를 사용해야한다.
SSL은 Secure Socket Layer로 Netscape Communications Corporation에서 웹 서버와 웹 브라우저 간의 보안을 위해 만든 프로토콜
공개키와/개인키, 대칭키 기반으로 사용한다.
TLS는 SSL의 업그레이드 버전으로 생각하면 된다.
대칭키란 동일한 키로 암호화 복호화를 수행하는 방법
장점 : 암호화 복호화가 쉬움
단점 : 보안이 취약함
공개키 방식은 서로 다른 키로 암호화 복호화를 수행하는 방법
데이터 암호화 시 공개키 사용하고, 데이터 복호화 시 개인키를 사용한다.
장점 : 암호화 복호화가 쉬움
단점 : 보안이 취약함
이러한 장단점 때문에 대칭키, 비대칭키 방식을 혼합하여 사용한다.
먼저 A->B로 접속 요청

B->A 공개키 전송

A는 자신의 대칭키를 B에게 받은 공개키로 암호화한다.

A->B 암호화한 대칭키 전송

B는 암호화된 A의 대칭키를 자신의 개인키로 복호화함.
이를 통해 A의 대칭키를 안전하게 전달할 수 있다. 그러므로 안전하게 통신할 수 있다.

사용자가 사이트에 접속하기 이전
먼저, 사이트 인증서가 필요하다.
이를 위해 사이트-> 인증기관 사이트 정보와 사이트 공개키를 전송

인증기관에서 사이트 정보와 사이트 공개키를 검증하는 과정을 거친다.

검증이 성공적으로 완료되면 사이트 인증서를 생성하기 위해 인증기관의 개인키로 서명한다.

사이트 인증서를 생성하고 이를 사이트에 전송

인증기관->사용자 인증기관 공개키

사용자 브라우저에 인증기관 공개키가 자동으로 내장된다. 그리고 사이트는 사이트 인증서를 받은 상태이다.

사용자가 사이트에 접속한 후(사용자가 사이트 접속 요청)
먼저, 사용자가 사이트 접속 요청하면 사이트는 자신이 신뢰할 수 있는 사이트임을 증명하기 위해 사이트 인증서를 보낸다.

사용자는 자신의 브라우저에 내장된 인증기관 공개키를 통해 사이트의 정보와 공개키를 얻어낸다.

사이트 공개키를 이용해 사용자의 대칭키를 암호화한다.

사용자->사이트 암호화한 사용자 대칭키 전송하고 앞서 설명한 과정을 통해 암호문을 주고 받을 수 있게된다. 즉, SSL 통신을 할 수 있게된다.



즉, SSL은 사이트외 사용자와 인증기관까지 협력하기 때문에 안전한 접속방법이 된다.
레퍼런스 : 우아한 테크 다니의 HTTPS
사진 : https://techrecipe.co.kr/posts/34861