SSL 인증서의 방식
SSL은 HTTPS 프로토콜이 돌아가는 보안이 강화된 프로토콜을 말한다. SSL 인증서는 클라이언트에게 서버의 신원을 보장해주는 역할을 한다. 보통 웹서버에 설치한다. 요즘은 NGINX에 설치하는 경우가 많다.
서버는 클라이언트로부터 요청이 올 때 인증서를 클라이언트에게 보내준다. 서버는 CA라는 인증된 기업으로부터 SSL 인증서를 구매했다.
클라이언트인 브라우저는 공인된 CA의 리스트를 가지고 있다. 서버로부터 인증서가 왔을때 인증서를 발급해준 CA가 자신의 공인된 CA 리스트에 들어있는지 판단한다.
인증서 내부에는 여러 데이터들이 있는데 핵심은 서버가 생성한 공개키이다. SSL 인증서를 통한 보안 통신의 과정을 살펴보자.
- 공인된 CA로부터 발급된 인증서라는건, 그 CA의 공개키로 복호화가 가능한지로 판단한다.
- 만약 성공했다면 서버에서 보낸 랜덤 데이터와 클라이언트의 랜덤 데이터를 조합해서 pre master secret 생성, 이 키가 차후에 session key라는 대칭키를 생성해줄 녀석이다.
- 이때 대칭키를 클라이언트에서 서버로 넘겨줘야 하는데, 이 과정에서 탈취당할 위험이 있다. 따라서 대칭키 자체를 서버의 공개키로 암호화 해버리는 방식을 사용한다.
- 서버의 공개키로 암호화 된 대칭키는 서버로 전달되고, 서버측은 서버의 비대칭키로 그 pre master key를 복호화 한다.
이 방법을 사용하는 이유는, 모든 통신에 공개키를 사용하게 되면 낭비되는 컴퓨팅 자원이 너무나 많기 때문이다. 따라서 대칭키를 암호화 할때만 공개키 방식을 사용하고, 서버로 안전하게 전달된 후에는 대칭키 방식으로 데이터를 주고 받는다.