- 악수(Handshake): 이는 클라이언트(예: 웹 브라우저)와 서버가 처음 만나 서로 인사를 나누는 과정을 의미합니다. 이 단계에서 양측은 서로 데이터를 주고받을 수 있는지, 어떤 방법으로 데이터를 주고받을 것인지를 확인합니다.
- 공개키와 대칭키: 여기에서 공개키 방식은 각 키가 다른 암호화 방식입니다. 공개키로 데이터를 암호화하면 비공개키(혹은 개인키)로만 복호화가 가능합니다. 그러나 이 방식은 컴퓨터 자원을 많이 사용합니다. 대신 대칭키 방식은 암호화와 복호화에 같은 키를 사용하므로 효율적이지만, 키를 안전하게 공유해야하는 문제가 있습니다.
- SSL의 방식: SSL은 이 두 방식의 장점을 결합합니다. 클라이언트와 서버는 처음에는 공개키 방식을 사용하여 안전하게 대칭키를 공유하고, 이후에는 대칭키를 사용하여 효율적으로 데이터를 암호화하여 주고 받습니다.
- 핸드쉐이크의 세부 과정:
- 클라이언트는 서버에 "안녕하세요"라는 메시지(공식적으로 "Client Hello"라고 합니다)를 보내고, 서버도 "안녕하세요"("Server Hello")라는 메시지로 응답합니다. 이 때 양측은 랜덤 데이터와 자신이 사용 가능한 암호화 방식을 서로에게 알립니다.
- 서버는 클라이언트에게 자신의 공개키가 포함된 인증서를 보냅니다.
- 클라이언트는 인증서를 확인하고, 서버의 공개키를 사용하여 새로운 대칭키(이를 Pre-Master Secret이라고 합니다)를 생성하고 암호화하여 서버에게 전송합니다.
- 서버는 자신의 비공개키를 사용하여 Pre-Master Secret를 복호화하고, 이를 기반으로 똑같은 대칭키를 생성합니다.
- 이제 클라이언트와 서버는 같은 대칭키를 가지고 있으므로, 이후의 통신은 이 대칭키를 사용하여 암호화됩니다.
이렇게 SSL 통신은 공개키와 대칭키를 적절히 결합하여 안전성과 효율성을 모두 확보하려는 방식입니다.