SSL/TLS

Panda·2023년 3월 28일
0

Network

목록 보기
1/2

면접 질문때 TLS가 무엇인지 아시냐고 물어보더라고요. 그래서 어? 분명 SSL 인증서 발급하고 HTTPS 적용하는 과정에서 TLS가 뭔지 한번도 본적이 없었거든요.
그래서 이 TLS은 뭔지 SSL 구조는 어떻게 되어있는지에 대해 자세히 알아보려고 합니다.

HTTP, HTTPS

일단 둘다 기본적으로 HyperText인 HTML을 전송하기 위한 프로토콜 입니다.

  • HTTP(HyperText Transfer Protocol)
  • HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)

HTTPS는 HTTP의 보안적인 단점(암호화)을 개선하여 나오게 된 프로토콜입니다.

HTTPS 통신은 SSL(TLS) Layer 위에서 이루어 지게 됩니다.
그럼 이 SSL/TLS 가 대체 무엇인지 한번 알아보겠습니다.

SSL/TLS

SSL(Secure Sockets Layer)

HTTP를 사용한 웹에서의 데이터는 가로채면 누구나 읽을 수 있는 일반 텍스트 형태로 전송 되었습니다.
이러한 문제때문에 Netscape가 1995년에 개인정보 보호, 인증, 데이터 무결성을 보장하기 위한 SSL을 개발하였다고 합니다.

SSL은 Secure Sockets Layer의 약자입니다. SSL 위에서 HTTP가 동작하면 HTTPS가 되고, FTP가 동작하면 SFTP가 됩니다. 즉, SSL은 HTTPS 만을 위한 보안 프로토콜이 아니란 이야기 입니다.

그렇다면 TLS라는 용어는 무엇일까요?

TLS(Transport Layer Security)

SSL라는 용어로 사용되다가 국제 표준화 기구인 IETF로 넘어간 이후에는 TLS로 이름이 변경되었습니다.
그렇기 떄문에 공식적으로 사용되는 메시지에는 TLS라는 용어가 훨씬 더 많이 사용되지만, 일반적으로 사람들끼리 주고받는 용어로는 SSL로 부르는 것 같습니다.
즉, SSL과 TLS은 사실상 같은 것이라고 봐도 무방할 것 같습니다.

작동방식

SSL은 웹에서 전송되는 데이터들을 암호화 합니다. 따라서, 데이터를 가로채도 복호화가 거의 불가능합니다.

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

HandSahking

  1. 클라이언트가 서버에 접속합니다. 이 단계를 Client Hello라고 합니다. 이 단계에서 암호화 관련 정보를 전달하게 됩니다.

    • 클라이언트 측에서 생성한 랜덤 데이터
    • 클라이언트가 지원하는 암호화 방식들
    • 세션 아이디
  2. 서버는 Client Hello에 대한 응답으로 Server Hello를 하게 됩니다. 이 단계에서 아래와 같은 정보를 전달하게 됩니다.

    • 서버 측에서 생성한 랜덤 데이터
    • 서버가 선택한 클라이언트의 암호화 방식
    • 인증서
  3. 서버측 자격을 검증하게 됩니다.

    • 클라이언트가 가지고 있는 CA 리스트 기반으로 인증서 발급 기관 검증
    • 클라이언트, 서버의 랜덤 데이터 조합으로 Pre Master Secret이라는 키를 생성, 이 때 사용할 암호화 기법은 대칭키이기 때문에 Pre Master Secret 값은 외부에 절대로 노출 되어서는 안됩니다.
    • Pre Master Secret을 서버의 공개키로 암호화 해서 서버에 전달해 서버측에서는 비공개키로 안전하게 복호화가 가능합니다.
  4. 클라이언트, 서버가 모두 Pre Master Secret 값을 가지게 되었습니다.

    • 클라이언트, 서버는 일련의 과저을 거쳐 Pre Master Secret -> Master Secret 값을 생성
    • Master Secert 은 Session Key를 생성
    • Session Key 값을 이용해서 서버와 클라이언트는 데이터를 대칭키 방식으로 암호화한 후에 주고 받게 됩니다. 즉, 데이터를 Session Key로 데이터를 암호화, 복호화를 합니다.
  5. 클라이언트와 서버는 핸드쉐이크 단계의 종료를 서로에게 알립니다.

인증서

SSL은 SSL인증서(=TLS인증서)가 있는 웹사이트만 실행할 수 있습니다.

SSL의 암호화 방식은 대칭키, 비대칭키 2가지를 혼용해서 사용할 수 있긴한데 보안적 이슈로 인해 사실상 비대칭키 방식을 사용합니다.
그렇기 때문에 SSL 인증서에는 공개 키가 포함됩니다. 이 공개키로 암호화가 가능한데 클라이언트의 요청은 공개 키를 이용해 서버에 암호화 하여 전달합니다.
외부에 공개하지 않는 개인 키를 이용해 암호화된 데이터를 복호화합니다.

이 개인키가 외부에 노출이 되어서 디지노타라는 회사가 파산한 사례도 있다 합니다.

해당 SSL 인증서를 발급하는 기관은 CA(Certificate Authority)라고 합니다.
그래서 돈주고 인증서를 발급하는게 정석이긴 하죠.

SSL 인증서의 역할

  1. 클라이언트가 접속한 서버가 신뢰할 수 있는 서버임을 보장합니다.
  2. SSL 통신에 사용할 공개키를 클라이언트에게 제공합니다.

무엇을 인증할까?

  1. 서비스의 정보

    • 도메인 유효성 검사 - 기업이 도메인을 관리하고 있다는 것 정도만 증명
    • 조직 유효성 검사 - 인증서 발급 시 CA가 기업을 확인하여 증명
    • 확장 유효성 검사 - CA는 조직이 존재하고 법적으로 사업자로 등록되어 있는지, 유효한 주소인지 등을 확인합니다. 대신에 시간과 비용도 많이 듭니다. 가장 큰 신뢰성을 제공.
  2. 서버 측 공개키

    • 공개키의 내용
    • 공개키의 암호화 방법

느낀 점

SSL이 HTTPS만을 위한건줄 알았는데
SSL위에 다른 프로토콜이 적용될 수 있다는 사실은 신기했네요.

그리고 SSL이랑 TLS이 사실상 같은거라는 것에 충격을 먹었습니다 ㅋㅋㅋㅋㅋ

profile
실력있는 개발자가 되보자!

0개의 댓글