본문 바로가기
Infrastructure/Network

SSL, TLS, SSL Certification(SSL 인증서), Cipher suite, HTTPS, SSL/TLS HandShake 이게 다 뭐람?

by 곰민 2023. 2. 11.

SSL/TLS 와 SSL Certification(SSL인증서), Cipher suite에 대해서 자세히 알아보고,
이들을 활용하여 HTTPS에서 SSL/TLS HandShake를 통한 SSL인증 과정이 어떻게 거쳐지는지 확인해보도록 하겠습니다.
안정적인 네트워크 서비스를 제공하는데 도움을 줄 것입니다 

 

ssl이었는데요 tls입니다 네?

 

 SSL(secure sockets layer)



SSL은 넷스케이프에 의해 작성된 프로토콜입니다.

SSL Netscape사에서 만든 계층, 프로토콜로 웹서버와 브라우저 사이의 보안을 담당하는 역할을 맡고 있습니다.

그리고 Certificate Authority(CA)라고 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용됩니다..
이후 IETF(Internet Engineering Task Force)에 SSL 프로토콜 제어권을 넘겼고
이후 1999년이 끝나기 전에 IETF는 TLS1.0을 발표하였습니다.
혼란 야기 방지차원에서 SSL 3.0은 2015년 공식적으로 사용 종료되었습니다.

TLS는 최신 암호화 프로토콜로, SSL 암호화로 혼용해서 부르는 경우도 많지만,
실제로 현재 SSL을 인증한 업체 및 제공하는 업체는 사실상 TLS 암호화를 제공하고 있습니다.


TLS(Transport Layer Security)



TLS 는 SSL의 업데이트 버전으로 SSL의 최종버전인 3.0과 TLS의 최초버전의 차이는 크지않으며, 이름이 바뀐것은 SSL을 개발한 Netscape가 업데이트에 참여하지 않게 되어 소유권 변경을 위해서였다고 합니다.
결과적으로 TLS는 SSL의 업데이트 버전이며 명칭만 다르다고 볼 수 있습니다.
SSL 대비 새로운 암호화 알고리즘을 제공합니다.
또한 TLS는 암호화된 데이터의 탈취를 시도하는 공격 man-in-the-middle-attack 과 같은 시도를 감지할 수 있습니다.

 

SSL 구조


SSL은 어떤 구조를 갖고 있을까요?

출처:https://www.geeksforgeeks.org/secure-socket-layer-ssl/

SSL Record Protocol : 상호 송수신을 위한 암호화 Cipher suite가 SSL Handshake 프로토콜에 의해 정해진 후 이러한 Cipher suite에 따라 실제로 전송하는 데이터를 TCP 패킷으로 변환하기 위한 기능을 수행합니다.

 

Change Cipher spce : 수신측에 어떠한 Cipher suite에 정의된 알고리즘과 키, 압축방식 등을 알려주는 용도로 사용합니다.

 

SSL Alert Protocol : SSL의 동작 과정에서 발생할 수 있는 문제에 대해 경고를 전달하기 위해 사용합니다.

 

SSL Protocol은 위와 같이 데이터를 암호화하는 과정이 포함 됩니다.

 


SSL 인증서(SSL Certification)


SSL 인증서(현재 일반적으로 TLS(Transport Layer Security) 인증서라고 함)는 클라이언트와 서버 간의 통신을 제3자가 보증해주는 전자화된 문서입니다.

인증서는 트리(Tree) 구조를 이룹니다.

최상위 인증서를 Root Certification Authority(줄여서 Root CA)라고 부르며, 인증서를 발행한 기관을 말합니다.

SSL 인증서의 목적은 웹 사이트와 방문자 두 당사자 간에 전송되는 중요한 정보가 보호되고 권한이 없는 제3자에 의해 가로챌 수 없도록 하는 것입니다.


SSL/TLS를 사용하려면 SSL 인증서를 받아야 합니다.
이 인증서는 웹 사이트의 ID를 확인하는 디지털 서명으로 작동합니다.

SSL 인증서에는 다음 정보가 포함되어 있습니다
  
1. 웹 사이트의 도메인 이름  
2. 인증서 발급자의 ID  
3. 암호화에 사용되는 공용 키  
4. 인증서의 만료 날짜  
5. 인증서 발급자의 디지털 서명  

사용자가 SSL 인증서가 있는 웹 사이트를 방문하면 해당 브라우저는 인증서를 확인하고 브라우저와 웹 사이트 간에 암호화된 연결을 설정합니다. 
이 암호화된 연결을 통해 로그인 자격 증명, 지불 정보 및 기타 중요한 데이터와 같은 두 당사자 간에 전송되는 모든 정보가 무단 액세스로부터 보호됩니다.

naver의 경우도 아래와 같이 url 왼쪽 자물쇠를 클릭하고 인증서에대한 정보를 얻을 수 있습니다.

 

Cipher suite


그렇다면 위 구조에서 봤던 Cipher suite는 무엇 일까요?

ms doc에서는 아래와 같이 말합니다.

A cipher suite is a set of cryptographic algorithms. The schannel SSP implementation of the TLS/SSL protocols use algorithms from a cipher suite to create keys and encrypt information. A cipher suite specifies one algorithm for each of the following tasks:
Key exchange
Bulk encryption
Message authentication

 

cipher suite는 암호화 알고리즘의 집합입니다.

TLS/SSL 프로토콜의 schannel SSP 구현은 cipher suite에서 알고리즘을 사용하여 키를 생성하고 정보를 암호화합니다.

cipher suite는 다음과 같은 작업에 대해 각각 하나의 알고리즘을 지정합니다

Key exchange
Bulk encryption
Message authentication

 

Cipher suite의 구조

 

출처:https://learn.microsoft.com/en-us/windows/win32/secauthn/cipher-suites-in-schannel

 

KeyExchange

Server와 Client간 Key를 교환할 방식을 선정하는 것입니다.

 

Signature

Server와 Client간 교환한 인증서를 확인하는 알고리즘입니다.

 

Bulk Enxryption

클라이언트와 서버 간에 교환되는 메시지를 암호화합니다

GCM 의 경우 블록 암호 운용 방식 이며 데이터를 암호화 할때 한꺼번에 암호화 하는 것이 아니라 블록 단위로 암호화 하게 되는데,

블록된 암호화 패킷을 조합하여 데이터를 추측 하는 것을 방지하기 위한 방식입니다.

 

 

MessageAuthentication

MessageAuthentication알고리즘은 메시지의 무결성을 보장하는 메시지 해시 와 서명을 생성합니다.

 

 

HTTPS & SSL/TLS HandShake


HTTPS란?

HTTPS(HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS,[1][2] HTTP over SSL,[3] HTTP Secure[4][5] -wiki

 

HTTPS 통신은 위 SSL/TLS을 활용하여 패킷을 암호화 하는 과정을 거치게 됩니다.

HTTP의 경우 패킷들이 평문으로 전송이 되기 때문에 중간에 패킷을 탈취할 경우 데이터들이 어떤 것들이 왔다 갔다 하는지를 알 수 있게 됩니다.
replay attack 과 같이 해당 패킷을 탈취한뒤 다시 패킷을 가공하여 재전송하는등 보안상의 취약점들이 존재합니다.

 

HTTPS handshake 과정

TCP 3-way-handshake 과정을 거치고 난다음에
암호화된 패킷 통신을 위해 SSL/TLS handshake 과정을 거치게 됩니다.

 

출처:https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
출처:https://www.cheapsslshop.com/blog/understanding-ssl-tls-handshake-protocol

 

step1 : Client Hello

Client는 SSL Version, Cipher suite, session key를 만들기 위한 임의의 수를 server로 보냅니다.

 

step2 : Server Hello

Client Hello를 받은 서버는 서버가 선택한 SSL Version, Cipher suit ,Server-Nonce 즉 암호화 임시값 ,server가 갖고있는 certification 등을 Client로 보냅니다.

 

step3

Client는 Server의 certification를 체크합니다. certification이 유효한 경우, Client는 Server-Nonce를 사용하여 "Pre-Master Secret"를 생성하고 Server certification의 공용 키를 사용하여 certification을 암호화합니다.

 

step4

server는 개인 키를 사용하여 "Pre-Master Secret"을 해독하고 클라이언트와 서버 모두 "Master Secret"을 생성하는 데 사용합니다 "Master Secret"은 session 키를 생성하는 데 사용되며, 클라이언트와 서버 간에 전송되는 데이터를 암호화하고 해독하는 데 사용됩니다.

 

step5 : Client Key Exchange

클라이언트는 암호화된 "Pre-Master Secret"이 포함된 "Client Key Exchange" 메시지를 서버로 보냅니다.

step6: Change Cipher Spec

클라이언트와 서버는 서로에게 "Change Cipher Spec" 메시지를 보내 핸드셰이크를 완료하고 새로 협상된 암호화 매개변수 사용을 시작한다는 신호를 보냅니다.

 

 

😀 이제 클라이언트와 서버가 서로 암호화된 데이터 전송을 시작할 수 있습니다.

 

참조


https://www.geeksforgeeks.org/secure-socket-layer-ssl/

https://www.geeksforgeeks.org/ssl-certificate/

https://run-it.tistory.com/30

https://learn.microsoft.com/en-us/windows/win32/secauthn/cipher-suites-in-schannel

반응형

댓글