728x90

 

HTTPS, 대칭키, 공개키, CA에 대해 모른다면 아래 포스팅을 참고해보자. 

https://dolphinsarah.tistory.com/52

 

HTTPS (대칭키, 공개키, CA)

HTTP에 보안처리(SSL)가 된 버전이 HTTPS이다. (요즘은 HTTPS가 웹의 기본 스펙이라고 봐도 무방함) HTTPS는 기존 HTTP 레이어에서 SSL 또는 TLS 프로토콜을 얹어 평문 데이터를 암호화하고,  암호화, 인

dolphinsarah.tistory.com

 

SSL은 아래 3가지 액션으로 인해 동작하게 된다. 

  • 악수(handshake)
  • 데이터 전송
  • 세션 종료

 

악수(handshake)

클라이언트, 서버 간의 통신을 하기 전 실제 통신을 할 수 있는지, 서로 검토하는 단계이다. 

 

사람이 처음 만나면 악수를 하듯이, 클라이언트와 서버도 비슷하다. 

 

클라이언트가 서버에 처음 접속하게 되는 시점, 단계를 Client Hello라고 한다. 

또한, 서버는 Client Hello에 대한 응답으로 Server Hello를 하게 된다. 

 

Client Hello 단계

  • 클라이언트에서 랜덤 데이터를 생성한다. 
  • 클라이언트에서 사용할 수 있는 암호화 방식들을 서버에 전달한다. 
  • 클라이언트에서 사용되는 암호화 방식과 서버에서 가능한 암호화 방식이 다를 수 있기 때문에, 두 군데 모두 사용할 수 있는 암호화 방식에 대해 협상이 필요하다. 

 

Server Hello 단계

  • Client Hello에 대한 응답 과정이다. 
  • 클라이언트와 동일하게 랜덤 데이터를 생성하며, 클라이언트에 전달한다. 
  • 클라이언트가 전달한 암호화 방식 중에서 서버 쪽에서도 사용할 수 있는 암호화 방식을 선택해서 클라이언트로 전달한다. 채택된 암호화 방식으로 클라이언트-서버 간 통신이 진행된다. 물론 클라이언트에서 보내준 암호화 방식을 서버에서 지원하지 않는다면, 암호화 협상 결렬로 인해 악수는 불발된다. 
  • 서버가 발급받은 인증서를 클라이언트로 전달한다. 

 

Client 인증 단계

  • 클라이언트는 서버의 인증서가 CA에 의해서 발급된 것인지를 확인하기 위해 클라이언트에 내장된 CA 리스트를 확인한다. CA 리스트에 인증서가 없다면 사용자에게 경고 메시지를 출력한다. 인증서가 CA에 의해서 발급된 것인지를 확인하기 위해 클라이언트에 내장된 CA의 공개키를 이용해서 인증서를 복호화한다. 복호화에 성공했다면 인증서는 CA의 개인키로 암호화된 문서임이 암시적으로 보증된 것이다. 인증서를 전송한 서버를 믿을 수 있게 된 것이다. 
  • 클라이언트는 Server Hello 단계에서 받은 랜덤 데이터와 Client Hello 단계에서 생성한 랜덤 데이터를 조합하여 pre master secret 키를 생성한다. 이 키는 데이터를 주고받을 때 사용하기 위한 암호화 키이며 대칭키 방식으로 사용되어질 키 값이다. 중요한 키임으로 절대 제 3자에게 노출되면 안된다. 그렇기 때문에 이 pre master secret 키 값을 서버에게 전달할 때 서버가 제공한 공개키로 암호화 하여 전송하며, 서버는 자신의 비공개키로 복호화하여 pre master secret 값을 취득한다. 클라이언트가 사용한 공개키는 Server Hello 단계에서 전달받은 인증서 안에 들어있다

 

Server 인증 단계

  • 서버는 클라이언트가 전송한 pre master secret 값을 자신의 비공개키로 복호화한다. 이제 서버와 클라이언트 모두 pre master secret 값을 공유하게 되었다. 
  • 서버와 클라이언트는 모두 일련의 과정을 거쳐서 pre master secret 값을 master secret 값으로 만든다. 
  • master secret은 session key를 생성하는데, 이 session key 값을 이용해서 서버와 클라이언트는 데이터를 대칭키 방식으로 암호화 한 후에 주고받는다. 이렇게 해서 세션키를 클라이언트와 서버가 공유하게 된다. 

 

악수(handshake) 종료

  • 위의 과정으로 클라이언트와 서버는 악수 단계의 종료를 서로에게 공유한다. 

 

데이터 전송

: 실제로 서버와 클라이언트가 데이터를 주고 받는 과정이다. 상대방에게 데이터를 송신하기 전, 악수 단계에서 발생한 세션 키 값으로 데이터를 대칭키방식으로 암호화한다. 

 

암호화된 데이터는 상대방으로 송신되며, 상대방도 세션키를 알고 있기 때문에 데이터를 복호화할 수 있다. 

 

SSL 통신은 공개키 방식, 대칭키 방식의 하이브리드 조합으로 통신한다. 

공개키 방식은 컴퓨터 자원을 꽤 많이 사용함으로 비용이 많이 드며, 또한 대칭키 방식만 사용하게 되면 인터넷 상 대칭키를 서로 주고받아야 하는데, 보안상 매우 위험하다.

 

그래서 속도는 느리지만 데이터를 안전하게 주고 받을 수 있는 공개키 방식으로 대칭키를 암호화하고, 실제 데이터를 주고 받을 때는 대칭키를 이용해서 데이터를 주고 받는 것이다. 

 

세션 종료

: 데이터 송수신이 끝나면 SSL 통신이 끝났음으로 서로에게 알려준다. 

이때, 통신에서 사용한 세션키(대칭키)를 폐기한다. 

 

728x90

'CS > 네트워크' 카테고리의 다른 글

HTTPS (대칭키, 공개키, CA)  (0) 2021.06.18
포워드 프록시(Forward Proxy)와 리버스 프록시(Reverse Proxy)  (0) 2021.06.17
HTTP 2.0과 특징  (0) 2021.06.11
로드밸런싱  (0) 2021.06.11
JWT - JSON Web Token  (0) 2021.06.04

+ Recent posts