SSL 통신에 대한 내용과 통신 과정
- 서버와 클라이언트가 주고 받는 패킷을 암호화 하여 전송하는 통신방식입니다.
- HTTPS는 SSL 프로토콜 위에서 작동하는 프로토콜입니다.
- 통신을 위하여 SSL 디지털 인증서를 사용하며, 이는 통신을 제 3자가 보증해주는 전자 문서입니다.
SSL 인증서
- 서버 접속 직후 클라이언트에게 정보를 전달하며, 접속하려는 서버가 신뢰할 수 있는 서버인지 판단할 수 있고, 통신 내용의 악의적 변경을 방지할 수 있습니다.
- 인증을 담당하는 기업들을 CA(Certificate authority) 혹은 Root Certificate라고 하며, 엄격하게 공인된 기업입니다.
- 테스트 등의 목적으로 사설 CA의 인증서를 사용할 수 있고, 개인이 직접 역할을 수행할 수 있습니다.
- 사설 인증서를 사용하는 경우 브라우저에서 경고를 출력합니다.
- 인증서에는 서비스의 정보(발급 CA, 서비스 도메인 등)와 서버 측 공개키(공개키 내용, 공개키 암호화 방법)가 포함됩니다.
- 웹브라우저는 CA리스트를 파악하고 있으며, 목록에 포함된 CA만 공인 CA로 인식합니다.
통신 과정
1. Client Hello: 클라이언트가 서버에 접속합니다. 이 단계에서 다음의 정보를 주고 받습니다.
- 클라이언트 측에서 생성한 랜덤 데이터 : 아래 3번 과정에서 생성됩니다.
- 클라이언트가 지원하는 암호화 방식들 : 클라이언트와 서버가 지원하는 암호화 방식이 서로 다를 수 있기 때문에 어떤 암호화 방식을 사용할 것인지 결정이 필요합니다. 이를 위해 클라이언트 측에서 사용할 수 있는 암호화 방식을 전송합니다.
- 세션 아이디 : 이미 SSL 핸드쉐이킹을 했다면 비용과 시간을 절약하기 위해서 기존의 세션을 재활용하게 되는데 이 때 사용할 연결에 대한 식별자를 서버 측으로 전송합니다.
2. Server Hello: Client Hello에 대한 서버의 응답입니다. 이 단계에서 다음의 정보를 주고 받습니다.
- 서버 측에서 생성한 랜덤 데이터 : 아래 3번 과정에서 생성됩니다.
- 서버가 선택한 클라이언트의 암호화 방식 : 클라이언트가 전달한 암호화 방식 중에서 서버 쪽에서도 사용할 수 있는 암호화 방식을 선택해서 클라이언트로 전달합니다. 결정된 암호화 방식을 이용해서 정보를 교환하게 됩니다.
- 인증서
3. CA리스트 확인 및 키 생성/전송
- 클라이언트는 서버의 인증서가 CA에 의해서 발급된 것인지를 확인합니다.
- CA 리스트에 인증서가 없다면 사용자에게 경고 메시지를 출력합니다.
- 인증서가 CA에 의해서 발급된 것인지 확인하기 위하여 클라이언트에 내장된 CA의 공개키를 사용해 인증서를 복호화합니다.
- 복호화에 성공했다면 인증서는 CA의 개인키로 암호화된 문서임이 보증되며, 인증서를 전송한 서버를 신뢰할 수 있습니다.
- 클라이언트는 위 2번 과정에서 받은 서버의 랜덤 데이터와 클라이언트가 생성한 랜덤 데이터를 조합하여 pre master secret이라는 키를 생성합니다.
- 이 키는 뒤의 세션 단계에서 데이터를 주고 받을 때 암호화하기 위해서 사용됩니다.
- 이 때 사용할 암호화 기법은 대칭키이며, pre master secret 값은 제 3자에게 절대로 노출되어서는 안 됩니다.
- pre master secret 값을 서버에게 전달하기 위하여 서버의 공개키로 pre master secret 값을 암호화합니다.
- 값을 전송하면 서버는 자신의 비공개키로 안전하게 복호화합니다.
- 서버의 공개키는 서버로부터 받은 인증서 안에 포함됩니다.
4. 세션키 생성/공유
- 서버는 클라이언트가 전송한 pre master secret 값을 자신의 비공개키로 복호화합니다.
- 서버와 클라이언트가 모두 pre master secret 값을 공유하게 되면 서버와 클라이언트는 모두 일련의 과정을 거쳐서 pre master secret 값을 master secret 값으로 변환합니다.
- master secret은 session key를 생성합니다.
- session key 값을 사용해 서버와 클라이언트는 데이터를 대칭키 방식으로 암호화 한 후에 주고 받습니다.
- 위 과정을 통해 세션키를 클라이언트와 서버가 모두 공유하게 됩니다.
5. 클라이언트와 서버는 핸드쉐이크 단계의 종료를 서로에게 알립니다.
SSL 통신의 보안
- SSL은 안전하다는 인식이 있지만 패킷이 암호화되어 IPS 등의 검사 없이 통과할 수 있기 때문에 오히려 위험할 수 있습니다.
- 암호화 통신을 통하여 위협 개체가 검사 없이 통과할 가능성이 존재합니다.
- 이를 검사하기 위해 복호화 기술을 함께 사용할 수 있지만 성능 저하와 과부하문제를 고려해야 하며, 이로인한 서비스 중단의 위험이 있습니다.
- SSL기반으로 C&C 통신을 하는 악성코드의 경우 트래픽을 식별하는데 한계가 있습니다.
참고자료
댓글 없음:
댓글 쓰기