1. SSL/TLS

SSL : Secure Socket Layer

TLS : Transport Layer Sequrity

SSL이란 암호화 로직을 통해 상대방이 패킷의 내용을 확인하지 못하게 하는 기술로 트렌스포트 레이어에서 동작하는 암호화 프로토콜이다. SSL이 표준화 되면서 명칭이 TLS로 변경되었다고 함. 즉 같은 말임

OSI 7 Layer

Untitled

TLS위에 HTTP 통신을 올려서 통신하는 방식이 HTTPS 통신이다. 보는 것처럼 Transport 레이어에서 동작하는 프로토콜이기 떄문에 그상위 HTTP, SMTP, FTP를 그위에 올려서 사용이 가능하다고 한다.

통신 절차

크게 보면 3가지로 구분이 가능하다. 클라이언트와 서버간 지원 가능한 알고리즘을 교환한 후 키교환,인증을 통해 대칭키를 교환 하여 대칭키 암호화 방식으로 데이터를 암호화 하여 전달하는 방식이다.

자세한 통신 절차 (킹무위키)

  1. 먼저 클라이언트에서 서버에 ClientHello 메시지를 보낸다. 여기에는 클라이언트에서 사용 가능한 TLS 버전, 서버 도메인, 세션 식별자, 암호 설정 등의 정보가 포함된다.
  2. 클라이언트의 메시지를 받은 서버는 ServerHello 메시지를 클라이언트에게 보낸다. 여기에는 ClientHello 메시지의 정보 중 서버에서 사용하기로 선택한 TLS 버전, 세션 식별자, 암호 설정 등의 정보가 포함된다.
  3. 서버가 클라이언트에 Certificate 메시지를 보낸다. 여기에는 서버의 인증서가 들어간다. 이 인증서는 별도의 인증 기관에서 발급받은 것이며, 서버가 신뢰할 수 있는 자임을 인증한다. 전송이 끝나면 ServerHelloDone 메시지를 보내 끝났음을 알린다.
  4. 클라이언트는 서버에서 받은 인증서를 검증한다. 인증서의 유효 기간이 만료되지 않았는지, 그 인증서가 해당 서버에게 발급된 인증서가 맞는지 등을 확인한다. 인증서를 신뢰할 수 있다고 판단하였다면 다음 단계로 넘어간다.
  5. 클라이언트는 임의의 pre-master secret[1]을 생성한 뒤, 서버가 보낸 인증서에 포함된 공개 키를 사용해 암호화한다. 이렇게 암호화된 pre-master secret을 ClientKeyExchange 메시지에 포함시켜 서버에 전송한다.[2]
  6. 서버는 전송받은 정보를 복호화하여 pre-master secret을 알아낸 뒤, 이 정보를 사용해 master secret을 생성한다. 그 뒤 master secret에서 세션 키를 생성해내며, 이 세션 키는 앞으로 서버와 클라이언트 간의 통신을 암호화하는 데 사용될 것이다. 물론 클라이언트 역시 자신이 만들어낸 pre-master secret을 알고 있으므로, 같은 과정을 거쳐 세션 키를 스스로 만들 수 있다.
  7. 이제 서버와 클라이언트는 각자 동일한 세션 키를 가지고 있으며, 이 키를 사용해 대칭키 암호를 사용하는 통신을 할 수 있다. 따라서 우선 서로에게 ChangeCipherSpec 메시지를 보내 앞으로의 모든 통신 내용은 세션 키를 사용해 암호화해 보낼 것을 알려준 뒤, Finished 메시지를 보내 각자의 핸드셰이킹 과정이 끝났음을 알린다.
  8. 이제 서버와 클라이언트 간에 보안 통신이 구성된다.

먼저 서로가 어떤 TLS 버전을 사용 가능한지를 확인하고, 인증서를 사용해 서로를 믿을 수 있는지 확인한 뒤, 서로간의 통신에 쓸 암호를 교환하는 것이다. 그 다음부터는 서로 교환한 암호를 사용해 제3자가 도청할 수 없는 암호화된 통신을 하면 된다.