SSL TLS

gRPC 공부를 하던 중, SSL과 TLS 개념이 나와 공부를 해보고자 한다.

SSL & TLS

SSL?

원래 웹에서의 데이터를 가로채면 누구나 읽을 수 있는 일반 텍스트 형태로 전송되었다. 이러한 문제 때문에 인터넷 통신의 개인정보 보호, 인증, 데이터 무결성을 보장하기 위해 Netscapte가 처음으로 SSL을 개발했다.

SSL(Secure Sockets Layer)은 암호화 기반 인터넷 보안 프로토콜이다. 전달되는 모든 데이터를 암호화하고 특정한 유형의 사이버 공격도 차단한다.

SSL은 여러 취약성으로 전문가들은 SSL 사용 중단을 권장하고 있으며 그 대안으로 TLS가 언급되고 있다.

TLS?

TLS(Transform Layer Security)는 SSL의 업데이터 버전으로, 이름이 바뀐 이유는 SSL을 개발한 Netscape가 업데이트에 참여하지 않아 소유권 변경을 위해서였다고 한다.

SSL/TLS 작동 방식

SSL은 개인정보 보호를 제공하기 위해 웹에서 전송되는 데이터를 암호화한다. 따라서, 데이터를 가로채려해도 거의 복호화(인코딩/디코딩)가 불가능하다.

SSL은 클라이언트와 서버간의 핸드셰이크를 통해 인증이 이루어진다. 또한 데이터 무결성을 위해 데이터에 디지털 서명을 하여 데이터가 의도적으로 도착하기 전에 조작된 여부를 확인한다.

SSL/TLS 핸드셰이크

핸드셰이크란, 클라이언트와 서버간의 메시지 교환이며, HTTS 웹에 처음 커넥션할 때 진행된다.

핸드셰이크 단계는 클라이언트와 서버에서 지원하는 암호화 알고리즘, 키 교환 알고리즘에 따라 달라진다. 일반적으로 RSA 키 교환 알고리즘이 사용된다.

RSA란??

  • 비대칭 키 : 암호화, 복호화하는 키가 다른 키

  • 대칭 키 : 암호화, 복호화하는 키가 같은 키

  • RSA는 비대칭 키

  • 공개키로 열린다 == 해당 비밀키로 암호화된 정보다.

RSA 키 교환 알고리즘이란, 암호화와 복호화가 가능한 양방향 암호화를 말한다.

[RSA 키 교환 알고리즘 순서]

  1. 클라이언트 -> 서버 메세지 전송 - 이때 핸드셰이크가 시작된다. 이 메시지에는 TLS 버전, 암호화 알고리즘, 무작위 바이트 문자열이 포함된다.
  2. 서버 -> 클라이언트 메세지 전송 - 클라이언트의 메세지에 응답으로 서버의 SSL인증서, 선택한 암호화 알고리즘, 서버에서 생성한 무작위 바이트 문자열을 포함한 메세지를 전송한다.
  3. 인증 - 클라이언트가 서버의 SSL인증서를 인증 발행 기관에 검증한다.
  4. 예비 마스터 암호 - 클라이언트는 무작위 바이트 문자열을 공개 키로 암호화된 premater secret 키를 서버로 전송한다.
  5. 개인 키 사용 - 서버가 premaster secret 키를 개인 키를 통해 복호화한다. (개인 키로만 복호화 가능)
  6. 세션 키 생성 - 클라이언트와 서버는 클라이언트가 생성한 무작위 키, 서버가 생성한 무작위 키, premaster secret 키를 통해 세션 키를 생성한다. 양쪽은 같은 키가 생성되어야 한다.
  7. 클라이언트 완료 전송 - 클라이언트는 세션 키로 암호화된 완료 메세지를 전송한다.
  8. 서버 완료 전송 - 서버도 세션 키로 암호화된 완료 메세지를 전송한다.
  9. 핸드셰이크 완료 - 핸드셰이크가 완료되고, 세션 키를 이용해 통신을 진행한다.