[네트워크] HTTPS은 무엇이고 SSL은 어떻게 통신할까?
이번 포스팅은 HTTPS와 SSL 통신과정에 대해 정리해보겠습니다.
HTTP(Hyper Text Transfer Protocol)
HTTP는 사용하면 클라이언트와 서버간의 요청 및 응답을 주고 받을 수 있는 프로토콜입니다. 하지만 HTTP는 암호화되지 않은 평문 데이터를 전송하는 프로토콜이라 해커가 탈취를 하면 데이터를 조회할 수 있습니다.
HTTPS(Hyper Text Transfer Protocol Secure)
HTTPS는 비대칭키(공개키/개인키) 암호화 방식을 사용하여 클라이언트와 서버간의 주고 받는 데이터를 암호화하는 프로토콜입니다. HTTPS는 HTTP에 SSL을 사용하여 보안을 한층 업그레이드 했다고 보면 됩니다.
HTTPS를 사용하면 해커가 정보를 탈취해도 데이터가 암호화되어 있기 때문에 이해하기 어렵습니다.
HTTPS 사이트는 주소창에 자물쇠 표시를 클릭하면 확인할 수 있습니다.
SSL(Secure Sockets Layer)
SSL은 대칭키, 비대칭키 개념을 모두 사용하여 브라우저와 서버간의 보안을 위해 만들어진 프로토콜입니다.
AWS Certificate Manager를 사용하거나 Let's Encrypt 사이트에서 SSL 인증서를 무료로 발급할 수 있습니다.
AWS Certificate Manager를 사용한 무료 SSL 인증서 발급 과정은 추후 포스팅을 진행하도록 하겠습니다.
SSL 통신 과정
SSL 통신 과정을 이해하기 위해서는 CA 개념 이해가 필요합니다.
CA는 Certificate Authority의 약자로 SSL 인증서를 발급해주는 공식 기관입니다.
SSL 발급 과정은 다음과 같습니다.
1. 우리에게 정보를 제공해주는 웹 사이트(구글, 네이버 등)는 웹 사이트의 각종 정보 및 공개키를 CA(인증기관)에 전송합니다.
2. CA는 웹 사이트의 각종 정보 및 공개키를 받아 검증을 한 이후 CA의 개인키로 서명을 진행하여 SSL 인증서를 생성하여 웹 사이트에 전달합니다. (암호화를 했다고 생각하시면 됩니다.)
3. CA는 CA의 공개키를 사용자의 웹 브라우저에 전송합니다. 웹 브라우저는 이를 브라우저 내부에 저장합니다.
위의 SSL 발급 과정은 사용자가 웹 사이트에 접근하기 전의 과정입니다.
SSL 발급 이후 통신 과정은 다음과 같습니다.
1. 사용자가 웹 사이트에 접속 요청을 보내면 웹 사이트는 본인 사이트가 신뢰할 수 있는 사이트라는 것을 사용자에게 증명하기 위해 CA로부터 발급받은 사이트 인증서를 전송합니다.
2. 사이트 인증서는 CA의 개인키로 서명되었기 때문에 사용자는 브라우저 내부에 있는 CA로부터 전달받은 공개키로 사이트 인증서를 복호화합니다.
3. 사이트 인증서를 성공적으로 복호화했다면 사이트의 공개키와 사이트의 각종 정보를 확인할 수 있습니다. 사용자는 사이트의 공개키로 자신의 대칭키를 암호화하고 웹 사이트에 전송합니다.
4. 웹 사이트는 웹 사이트의 개인키로 복호화를 진행하여 사용자의 대칭키를 얻습니다. 이러한 과정을 통해 해커는 중간에서 사용자의 대칭키를 탈취해도 웹 사이트의 공개키로 암호화되어 있기 때문에 해석을 할 수 없습니다.
5. 이후 사용자와 웹 사이트는 대칭키를 공유하고 있으므로 암호화하여 데이터를 요청 및 응답할 수 있습니다.
위 내용을 토대로 SSL 통신 과정에서 대칭키, 비대칭키를 모두 활용하는 것을 알 수 있습니다.