Developing Myself Everyday
article thumbnail
Published 2023. 3. 31. 11:40
SSL & TLS 개발자의 기본 소양/NETWORK

SSL(Secure Sockets Layer) 이란?


 SSL은 클라이언트와 서버 간의 통신을 암호화하는 보안 프로토콜이다. SSL 3.0 버전에서 보안 취약점이 발견되어, 이후 버전에서는 TLS 프로토콜이 사용된다. TLS는 SSL과 호환되며, 더욱 강력한 암호화 기능을 제공한다.

 'HTTPS://' 로 사용되는 웹 사이트가 있다면 SSL을 사용하는 경우라고 볼 수있다.

 

TLS(Transport Layer Security)


 TLS는 클라이언트와 서버 간의 통신을 암호화하기 위해 대칭키 암호화와 공개키 암호화를 혼합하여 사용한다. 대칭키 암호화는 데이터를 전송하는 데 사용되며, 공개키 암호화는 대칭키를 안전하게 전달하기 위해 사용된다. 

 또한, TLS는 디지털 인증서를 사용해 서버의 신원을 확인한다. 디지털 인증서는 제 3자 기관에서 발급하는 것으로, 서버의 고유한 식별자 역할을 한다. 클라이언트는 서버의 디지털 인증서를 확인하고, 신뢰할 수 있는 서버인지 확인한 후 통신을 수행한다. 

 

 

 SSL과 TLS는 인터넷에서 전송되는 뎅터를 보호하고, 중간에서 데이터를 가로채어 내용을 엿볼 수 없도록 보안성을 제공한다. 이러한 보안 프로토콜은 웹 브라우저와 웹 서버 간의 통신, 이메일 전송, 파일 전송 등 다양한 데이터 통신에서 사용된다.

 

 

SSL/TLS HandShake


 

SSL/TLS 핸드셰이크는 클라이언트와 서버 간의 인증 및 키 교환을 위한 과정이다.  다음과 같은 과정을 가진다.

  1. 클라이언트가 자신의 SSL/TLS 버전, 암호 알고리즘 목록 그리고 사용 가능한 압축 방식을  'client hello'  메시지에 담아 서버로 보낸다.
  2. 서버는 클라이언트에게 SSL/TLS 버전, 선택한 암호 알고리즘, 선택한 압축 방식 그리고 CA가 사인한 서버의 공개 인증서를  'server hello'  메시지에 담아 답장한다. 이 인증서는 대칭키가 생성되기 전까지 클라이언트가 나머지 핸드셰이크 과정을 암호화는는 데에 쓸 공개키를 담고 있다.
  3. 클라이언트는 서버측 디지털 인증서가 유효한지를 신뢰할 수 있는 CA 목록을 통해 확인한다. 만약 CA를 통해 신뢰성이 확보되면, 클라이언트는 의사 난수 바이트를 생성해 서버의 공개키로 암호화한다. 이 난수 바이트는 대칭키를 정하는데 사용된다.
  4. 서버는 난수 바이트를 자기 개인키로 복호화해 대칭 마스터키 생성에 활용한다.
  5. 클라이언트는  'finished'  메시지를 서버에 보내면서, 지금까지의 교환 내역을 해시한 값을 대칭키로 암호화하여 담는다.
  6. 서버는 스스로 해시를 생성해 클라이언트에세 도착한 값과 일치하는지 확인한다. 일치하면 서버도  'finished'  메시지를 클라이언트에 보낸다.
  7. 이제부터  SSL/TLS 세션이 대칭키로 암호화된 HTTP 데이터를 전송한다.

 

※  CA(Certificate Authority)
 CA는 디지털 인증서를 발급하는 기관을 의미한다. CA는 공인된 제 3자 기관으로서, 디지털 인증서를 발급한느 것 외에도 디지털 인증서의 유효성 검증 및 인증서 폐기 등의 역할을 수행한다.
※ 공개키 암호화
 공개키 암호화는 두 개의 서로 다른 키를 사용해 데이터를 암호화하고 복호화하는 방식이다. 이 중 한 개의 키는 공개키(Public Key)로, 누구나 알 수 있으며, 다른 한 개의 키는 개인키로(Private Key)로, 암호화를 수행한 주체만 알고 있다. 데이터를 보내려는 사람은 수신자의 공개키를 이용해 데이터를 암호화하고, 수신자는 이를 자신의 개인키를 이용해 복호화한다. 공개키 암호화는 대칭키 암호화보다 안전하지만, 처리 속도가 느리기 때문에 대칭키 암호화와 함께 사용한다.
※ 대칭키 암호화
 대칭키 암호화는 데이터를 암호화하는 데 사용되는 키와 데이터를 복호화하는 데 사용되는 키가 모두 같은 암호화 방식이다. 즉, 암호화와 복호화에 사용되는 키가 동일하다. 이러한 방식은 속도가 빠르지만, 키가 노출될 경우에는 안전성이 보장되지 않는다.

Reference

 

[브라우저에 URL 입력 후 일어나는 일들] 5_TLS/SSL Handshake

이전에도 계속 언급했듯 HTTPS 는 HTTP에서 통신 내용을 암호화하는 것이 추가되었습니다. 이때 암호화를 하기 위해 어떤 과정이 일어나는지 알아보도록 하겠습니다. HTTPS는 클라이언트와 서버간

wangin9.tistory.com

 

 

GitHub - SantonyChoi/what-happens-when-KR: Korean translation of What-happens-when (https://github.com/alex/what-happens-when)

Korean translation of What-happens-when (https://github.com/alex/what-happens-when) - GitHub - SantonyChoi/what-happens-when-KR: Korean translation of What-happens-when (https://github.com/alex/wha...

github.com

 

'개발자의 기본 소양 > NETWORK' 카테고리의 다른 글

HTTP와 TCP/IP 그리고 소켓과 웹소켓  (0) 2023.11.06
TCP / IP 계층에서 데이터 전달에 따른 프로토콜 동작  (0) 2023.04.06
FTP & FTPS  (0) 2023.03.31
SSH & SCP & SFTP  (0) 2023.03.31
HTTP & HTTPS  (0) 2023.03.31
profile

Developing Myself Everyday

@배준형

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