Shine's dev log

SSL/TLS의 개념 본문

컴퓨터 네트워크

SSL/TLS의 개념

dong1 2020. 8. 6. 18:52

1. Secure Protocols

 

흔히 tcp/ip 5계층에서 보안 관련된 프로토콜은 많이 존재한다. 대표적인 예를 들어보면 다음과 같다.

 

1) Application Layer - HTTPS, SSH, PGP, S/MIME

2) Transport Layer - SSL/TLS

3) Network Layer - IPSec, VPN

4) Data Link Layer - L2TP

 

오늘 정리해볼 내용은 이 중에서도 Transport Layer을 책임지는 SSL/TLS라는 녀석이다. (엄밀히 따지면, SSL/TLS가 Transport Layer에 속한 것은 아니다. 자세한 내용은 뒤에 추가적으로 설명하겠다.)

 

 

 

2. SSL(Secure Socket Layer)

 

SSL이란 직역해보면 보안 소켓 레이어라는 뜻으로, 인터넷 상에서 데이터 전송시에 안전하게 데이터가 오갈 수 있도록 도와주는 레이어다.

 

기본적으로 Application Layer의 경우 암호화 작업 없이 그대로 전송된다. 따라서 http 프로토콜을 쓰는 사이트에 접속할 때, 패킷을 잡아 Application Layer 관련 정보를 분석해보면 손쉽게 평문의 민감한 정보를 알아낼 수 있다.

 

http 프로토콜 패킷 헤더의 일부. 평문이 그대로 노출된 것을 알 수 있다.

 

하지만, https 프로토콜을 쓰는 사이트에 접속할 때 교환되는 패킷을 아무리 분석해봐도 평문의 정보를 얻을 수 없는데, 이는 어디선가 평문의 정보를 암호화하였기 때문이다. 이 때, application layer의 데이터를 암호화해주는 녀석이 바로 SSL/TLS이다.

 

앞서 SSL/TLS가 Transport layer에 속한 것은 아니라고 했는데, 그 이유를 아래의 그림을 보면 알 수 있다.

 

SSL/TLS

 

위의 그림에서 알 수 있듯이 SSL은 application layer와 transport layer의 사이에 위치해있다. application layer가  데이터를 SSL에게 보내주면, SSL은 이 데이터를 암호화하여 transport layer로 보내주는 중간다리 역할을 한다.

이 때, transport layer는 SSL을 거치고 난 결과값을 그냥 application data로 인식하기 때문에 별다른 추가작업 없이 손쉽게 이용할 수 있다.

 

SSL/TLS를 이용하는 웹사이트 URL의 경우 http://가 아니라 https://로 시작한다. 포트번호는 443이다.

 

 

 

3. SSL의 통신 준비 과정 (SSL handshake)

 

TLS handshake

 

(1) 클라이언트가 서버에 접속하여 [프로토콜 버전, 사용 가능한 Cipher Suite] 들을 보낸다. (Client Hello)

 

(2) 서버가 Client Hello를 받고, 대답으로 [선택한 Cipher Suite, 서버 인증서] 를 보낸다. (Server Hello)

여기서 서버 인증서란, 서버의 공개키를 인증기관이 전자서명으로 인증한 것을 말한다.

 

(3) 클라이언트는 서버 인증서를 받고, 이 인증서가 신뢰할만하다고 판단하고, 신뢰할만하다면 서버 인증서에서 서버 공개키를 추출한다.

 

(4) 클라이언트가 앞으로 서버와 통신할 때 사용할 세션키(대칭키)를 서버의 공개키로 암호화하여 서버에 보낸다. 이때 서버의 공개키로 암호화된 세션키를 pre master secret 라고 부른다.

Change Cipher Spec 라는 메시지도 함께 보내는데, 이는 앞으로 클라이언트가 보내는 메시지는 암호화 될 것이라는 것을 나타낸다.

 

(5) 서버는 받은 암호문을 서버의 개인키로 복호화하여 세션키를 얻는다.

Change Cipher Spec 라는 메시지를 보내는데, 이는 앞으로 서버가 보내는 메시지는 암호화 될 것이라는 것을 나타낸다.

 

 

이 과정을 거치고 나면, 결국 서버와 클라이언트 모두 같은 세션키(대칭키)를 얻게된다. 이제 세션이 종료될 때까지 이 세션키를 가지고 데이터를 암호화/복호화 하여 안전하게 통신을 하면 된다.

 

보안 인증서 만료

 

웹서핑을 하다보면 위와같은 창이 가끔씩 나오는데, 이는 웹사이트가 서버 인증서를 갱신하지 않았거나 잘못된 서버인증서를 제시했기 때문에 발생하는 문제이다.

 

Q.

'그냥 서버 공개키와 개인키를 가지고 통신하면 되는거 아닌가요? 굳이 세션키(대칭키)를 만들어야 하나요?'

 

A.

비대칭키 암호 방식은 대칭키 암호방식에 비해 현저히 느리다. 이런 이유로 굳이 세션키(대칭키)를 만들어서 사용한다.

 

 

 

4. SSL과 TLS

 

보통 SSL/TLS 이런식으로 많이 표기를 하는데, SSL(Secure Socket Layer)와 TLS(Transport Layer Security)의 차이점은 무엇일까?

 

1990년대 중반 넷스케이프라는 회사에서 SSL을 먼저 만들었다. 참고로 넷스케이프라는 회사는 과거에 지금의 크롬과 같이 엄청 많이 사용되던 인터넷 브라우저를 만든 회사이다. 이후 1999년 TLS라는 SSL의 업그레이드 버전이 표준화 되었다.

 

그리고 현재는 TLS 1.2, TLS 1.3 버전이 널리 사용되고 있다.

 

 

오늘 배운 내용을 정리해보면,

 

1. application layer와 transport layer 사이에는 application layer 의 데이터를 암호화/복호화 해주는 SSL/TLS 라는 레이어가 있다.

 

2. SSL/TLS는 서버 인증서를 활용하여 세션키를 교환한다.

 

3. SSL의 보완판이 TLS이다.

 

 

본 내용은 공부하며 작성한 것으로, 오류가 있을 수 있습니다.