규턴의 개발블로그
article thumbnail
Published 2022. 8. 24. 15:37
[SSL/TLS] SSL/TLS 란? cs/tls

SSL/TLS?

 

한줄요약: SSL과 TLS는 거의 같은거다.

 

SSL(Secure Socket Layer)

ssl은 브라우저 간의 통신 시 데이터를 주고받을때 암호화를 하여 안전하게 통신하기 위한 표준 규약입니다.

ssl architecture

다음 그림과 같이 Transport Layer 위에 SSL Record Protocol 이 존재하면 TCP/IP 통신시에 해당 규약을 통해 암호화된 데이터를 교환합니다.

여기서 Transport layer가 뭔가 TLS와 연관이 있는거 같습니다.

 

  

TLS(Transport Layer Socket) 

처음에 네스케이프에 의해 발명된 SSL이 표준화가 되며 바뀐 이름이 TLS입니다.

TLS 1.0은 SSL 3.0을 계승했습니다.

근데 아직 TLS라는 이름은 생소하여 SSL이 더 널리 쓰이긴 합니다.

즉, SSL는 TLS와 같은거라 봐도 무방하다!

 

 

Http/Https?

 

이때 SSL/TLS 인증서를 사용한 통신이 Https입니다.

 

기존의 Http는 데이터를 통신할때 암호화하지 않고 통신합니다.

Http 통신방식

그렇기에 Sniffing , 즉 중간에서 누군가가 데이터를 훔쳐보거나 가로챈다면, 중요 정보를 통신할 때 위험합니다.

 

Https를 사용한다면 위의 TLS 인증을 사용해 데이터를 암호화하여 주고받습니다.

(구체적인 방식은 다음 글에 작성합니다. 일단 이정도만 알아도 충분합니다.)

Https 통신방식

위와같은 방식인 https를 사용한다면 중요 정보를 교환할때도 안전하게 교환할 수 있습니다.

 

 

 

암호화(대칭키&비대칭키)

 

그럼 암호화는 어떤방식으로 하는것일까요

TLS는 대칭키와 비대칭키 둘 다를 사용해서 데이터를 암호화합니다.(성능적 이슈 때문에 2개 사용)

이전에 대칭키와 비대칭키에 대해 알아보겠습니다.

 

대칭키

 

대칭키

위 사진과 같이 데이터를 암호화/복호화 할때 사용하는 key가 같은것입니다.

 

 

 

비대칭키

비대칭키

 

비대칭키는 말그래도 같은 키를 사용하지 않습니다.

A: (A 공개키, A 개인키)

B: (B 공개키, B 개인키)

이런식으로 가지고 있습니다.

 

또한 공개키는 말그대로 공개되어도 상관없는 키입니다.

그래서 사진과 같이

1. B -> A에게 공개키를 줍니다.

2. A는 B의 공개키를 사용하여 암호화합니다.

3. B의 개인키를 사용해 암호화된 데이터를 복호하하여 평문을 획득합니다.

 

왜 이런방식이 안전하냐면 B의 개인키는 B 자신만이 가지고 있기에 해커가 암호화된 데이터를 가져가도 복호화 할 수 없습니다.

참고로 키가 다른데 해당 방식이 가능한 이유는 공개키,개인키 간의 복잡한 수학적 관계가 얽혀있기 때문입니다.

(수학적 관계로 인해 비대칭키 사용시 리소스 소모가 크다고 합니다.)

 

 

저는 예전에 대칭키만 사용하면 되지, 왜 공개키,개인키와 같이 복잡한 방식을 사용하는지 의문이었습니다. 하지만 대칭키에서 가장 중요한 문제 중 하나가 대칭키 공유문제입니다.

대칭키를 직접 만나서 공유하지 않는 이상 메일로 받든 뭘로 하든 간에 특히 인터넷을 사용한다면 중간에 가로챌 가능성은 존재하기 때문입니다.

그렇기 때문에 중간에 가로채어도 괜찮은 비대칭키도 사용하는것입니다.

 

 

SSL/TLS 암호화 방식

 

대칭키와 비대칭키 각각 단점을 보완하기 위해 TLS에서는 둘다 사용합니다.

좋은 예제가 있어 참고합니다.

SSL/TLS 암호화 방식

즉, 데이터를 암호화할 대칭키를 비대칭키로 암호화 하고

실질적으로 데이터를 주고받을땐 대칭키로 암호화/복호화 과정을 진행합니다.

 

 

위의 과정은 TLS가 데이터를 주고 받을때의 과정을 간략하게 설명한 것 입니다.

하지만, 클라이언트 입장에서 서버가 믿을만한 녀석인지 알 수 있어야 합니다.

이러한 과정을 handshake라고 하는데 해당 과정은 다음 포스팅에서 알아보겠습니다.

 

 

참고

https://babbab2.tistory.com/4?category=960153

 

 

 

 

 

 

 

 

'cs > tls' 카테고리의 다른 글

[SSL/TLS] CA를 이용한 서버 인증  (0) 2022.08.29
profile

규턴의 개발블로그

@규턴이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!