회사 내부 시스템 운영하는 일을 하다보니, 처음 세팅할때 인증서 오류 관련된 내용을 자주 접한다.
SSL 인증에 대해서 정리하고 넘어가야징ㅎㅎㅎ 참고
SSL 은 프로토콜 이름, Https 는 SSL 프로토콜 위에 돌아가는 프로토콜
SSL 인증서는 두 가지 기능을 한다.
- 클라이언트가 연결하려는 서버가 클라이언트가 맞는지 인증
- 클라이언트 - 서버간 통신에 사용하기 위한 대칭키를 제공
처음 개념을 들으면 무슨 말인지 모를 수 있다.
요약해서 말하자면 SSL 인증서는 대칭키 방식, 공개키 방식 두 가지 인증 방식을 사용한다.
공개키 방식은 서버를 인증하고 대칭키를 전달하기 위해 사용하고, 대칭키는 서버-클라이언트간 실질적인 통신을 위해 사용한다.
공개키 방식을 사용하는 이유는 대칭키를 보안속에 전달하기 위함이고, 실질적인 통신은 대칭키를 하는 이유는 공개키 방식만으로 하는것이 너무 부하가 많이 가는 일이기 때문이다.
일단 요약은 했고, 그럼 공개키 방식, 대칭키 방식은 무엇인지부터 ssl 인증이 어떤 방식으로 서버-클라이언트 연결되는지 알아보자.
공개키 방식
통신하고자 하는 A,B 가 있을 때, A는 공개키로 데이터를 암호화하여 전달한다. 이 내용은 B가 가지고 있는 비공개키를 통해서만 복호화 될 수 있다. 따라서 C 가 공개키를 안다고 하더라도 복호화할 수 없다.
이 방식을 역으로 사용하여 상대를 인증할 수 있다.
A 가 비공개키로 데이터 암호화해서 전달한다고 생각해보자. 그럼 B는 공개키로 복호화하는데, 이게 복호화가 된다는 것은 A가 해당 비공개키로 암호화한다는 것을 인증해준다. 이것을 전자서명이라고 한다. 이때 공개키가 털린다면 해당 데이터가 위험하다는 단점이 있지만, 데이터 암호화 보다 서로간의 인증을 위한 역할이기에 이 방식 사용한다.
:thinking: SSL 인증서에서는 공개키 방식 어떻게 사용하지?
SSL 인증서를 발급해주는 CA 기관이 있다. 브라우저는 CA 에서 발급해주는 인증된 리스트를 가지고 있다. 서버 접근하면 서버는 인증서를 주는데, 이때 브라우저는 가지고 있는 인증 CA 에서 발급했는지 보고 CA 의 공개키로 복호화 한다. 여기서 복호화가 된다면 전자서명으로 CA 의 인증이 된 믿을만한 인증서, 서버구나 확인이 가능하다.
대칭키 방식
통신하고자하는 A, B 가 서로 같은 키를 가지고 암복호화 하는 것이다. 이때는 처음 통신할때 대칭키를 나누어 가지는 것이 관건이다. 여기서 탈취되면 다 끝이니까 ㅠㅠ .
:thinking: 대칭키 어떻게 나누어 가지지?
클라이언트는 위의 방식을 통해 얻은 서버의 공개키로, 서버에서 보낸 랜덤 데이터와 자기가 생성한 랜덤데이터를 암호화해서 pre_master를 전달한다. 같이 공유한 pre_master 값을 조작해서 대칭키를 만든다.