Stateless에 대처하기 위해 Stateful하게 만드는 방법
쿠키
세션
쿠키 VS 세션
<인증서 발급>
1. 서버는 공개키와 개인키를 만든 후, 신뢰할 수 있는 인증기관(CA)에 자신의 정보와 공개키를 관리해달라고 계약한다.
2. 인증 기관은 서버가 제출한 데이터를 검증한다. 검증을 완료하면 인증 기관만의 개인키로 서버에서 제출한 정보를 암호화한다.
3. 암호화된 인증서를 만들어 서버에게 제공해준다.
4. 인증기관은 웹브라우저에게 인증기관의 공개키를 제공한다.
(웹브라우저는 브라우저가 자동으로 신뢰하는 CA 인증서 집합이 사전 구성되어있고, 설치될때 함께 설치된다. 이 공개키를 사용하여 웹 서버의 인증서가 실제로 신뢰할 수 있는 인증기관에서 서명되었는지 확인한다.)
<서버에 데이터 요청>
1. 클라이언트(웹브라우저)가 사이트에 접속한다.
2. 서버는 자신의 인증서를 클라이언트에게 보낸다. (이때의 인증서는 인증기관이 만들어준 인증서)
3. 클라이언트는 브라우저에 미리 저장되어 있는 인증기관의 공개키로 인증서를 해독한다. 해독하여 검증하는 과정에서 접속하려는 서버의 정보와 서버의 공개키를 알게된다.(인증기관이 인증서를 만들때 이러한 정보를 가지고 만들기 때문)
4. 얻은 서버의 공개키를 이용하여 대칭키를 생성한다. (이때 대칭키를 굳이 생성하는 이유는 비대칭키보다 훨씬 계산이 효율적이기 때문이다. 처음 연결을 설정할 때에만 비대칭키 암호화를 사용하고, 이후 통신에서는 대칭키 암호화를 사용한다.)
5. 서버의 공개키로 위에서 생성한 대칭키를 암호화해서 사이트에 보낸다.
6. 서버는 서버의 개인키로 암호문을 해독하여 대칭키를 얻게 되고, 이제 양쪽이 대칭키를 이용해 데이터를 주고받을 수 있게 된다.
계속 대칭키를 사용해 데이터를 주고받다가 세션이 종료되면 대칭키를 폐기한다.
(클라이언트와 서버 간의 특정 세션 동안에만 사용되는 암호키이기 때문에 이 대칭키를 세션키라고 부르기도 한다.)
이 과정 자체를 SSL/TLS handshaking이라고 부르기도 한다.
https://rachel-kwak.github.io/2021/03/08/HTTPS.html
https://developer-ellen.tistory.com/189
https://wooody92.github.io/network/HTTP-%EB%B3%B4%EC%95%88-%EB%AC%B8%EC%A0%9C%EC%99%80-HTTPS/
https://dev-coco.tistory.com/61