면접 질문때 TLS가 무엇인지 아시냐고 물어보더라고요. 그래서 어? 분명 SSL 인증서 발급하고 HTTPS 적용하는 과정에서 TLS가 뭔지 한번도 본적이 없었거든요.
그래서 이 TLS은 뭔지 SSL 구조는 어떻게 되어있는지에 대해 자세히 알아보려고 합니다.
일단 둘다 기본적으로 HyperText인 HTML을 전송하기 위한 프로토콜 입니다.
HTTPS는 HTTP의 보안적인 단점(암호화)을 개선하여 나오게 된 프로토콜입니다.
HTTPS 통신은 SSL(TLS) Layer 위에서 이루어 지게 됩니다.
그럼 이 SSL/TLS 가 대체 무엇인지 한번 알아보겠습니다.
HTTP를 사용한 웹에서의 데이터는 가로채면 누구나 읽을 수 있는 일반 텍스트 형태로 전송 되었습니다.
이러한 문제때문에 Netscape가 1995년에 개인정보 보호, 인증, 데이터 무결성을 보장하기 위한 SSL을 개발하였다고 합니다.
SSL은 Secure Sockets Layer의 약자입니다. SSL 위에서 HTTP가 동작하면 HTTPS가 되고, FTP가 동작하면 SFTP가 됩니다. 즉, SSL은 HTTPS 만을 위한 보안 프로토콜이 아니란 이야기 입니다.
그렇다면 TLS라는 용어는 무엇일까요?
SSL라는 용어로 사용되다가 국제 표준화 기구인 IETF로 넘어간 이후에는 TLS로 이름이 변경되었습니다.
그렇기 떄문에 공식적으로 사용되는 메시지에는 TLS라는 용어가 훨씬 더 많이 사용되지만, 일반적으로 사람들끼리 주고받는 용어로는 SSL로 부르는 것 같습니다.
즉, SSL과 TLS은 사실상 같은 것이라고 봐도 무방할 것 같습니다.
SSL은 웹에서 전송되는 데이터들을 암호화 합니다. 따라서, 데이터를 가로채도 복호화가 거의 불가능합니다.
SSL은 클라이언트와 서버간에 HandShaking을 통해 인증이 이루어집니다. 또한 데이터 무결성을 위해 데이터에 디지털 서명을 하여 데이터가 의도적으로 도착하기 전에 조작된 여부를 확인합니다.
클라이언트가 서버에 접속합니다. 이 단계를 Client Hello라고 합니다. 이 단계에서 암호화 관련 정보를 전달하게 됩니다.
서버는 Client Hello에 대한 응답으로 Server Hello를 하게 됩니다. 이 단계에서 아래와 같은 정보를 전달하게 됩니다.
서버측 자격을 검증하게 됩니다.
클라이언트, 서버가 모두 Pre Master Secret 값을 가지게 되었습니다.
클라이언트와 서버는 핸드쉐이크 단계의 종료를 서로에게 알립니다.
SSL은 SSL인증서(=TLS인증서)가 있는 웹사이트만 실행할 수 있습니다.
SSL의 암호화 방식은 대칭키, 비대칭키 2가지를 혼용해서 사용할 수 있긴한데 보안적 이슈로 인해 사실상 비대칭키 방식을 사용합니다.
그렇기 때문에 SSL 인증서에는 공개 키가 포함됩니다. 이 공개키로 암호화가 가능한데 클라이언트의 요청은 공개 키를 이용해 서버에 암호화 하여 전달합니다.
외부에 공개하지 않는 개인 키를 이용해 암호화된 데이터를 복호화합니다.
이 개인키가 외부에 노출이 되어서 디지노타라는 회사가 파산한 사례도 있다 합니다.
해당 SSL 인증서를 발급하는 기관은 CA(Certificate Authority)라고 합니다.
그래서 돈주고 인증서를 발급하는게 정석이긴 하죠.
서비스의 정보
서버 측 공개키
SSL이 HTTPS만을 위한건줄 알았는데
SSL위에 다른 프로토콜이 적용될 수 있다는 사실은 신기했네요.
그리고 SSL이랑 TLS이 사실상 같은거라는 것에 충격을 먹었습니다 ㅋㅋㅋㅋㅋ