만쥬의 개발일기
article thumbnail

 

SSL이란?

SSL(Secure Sockets Layer)은 암호화 기반 인터넷 보안 프로토콜이다. 인터넷 통신의 개인정보 보호, 인증, 데이터 무결성을 보장하기 위해 출범했고, SSL은 현재 사용 중인 TLS 암호화의 전신이다.

 

TLS와의 차이 또한 의문이 생길 수 있는데, SSL은 TLS(Transport Layer Security)이라는 또 다른 프로토콜의 바로 이전 버전이다.

 

1999년 IETF(Internet Engineering Task Force)는 SSL에 대한 업데이트를 제안했고, IETF가 이 업데이트를 개발하고 Netscape는 더 이상 참여하지 않게 되면서, 이름이 TLS로 바뀌었다.

 

SSL의 최종 버전(3.0)과 TLS 첫 버전의 차이는 크지 않으며, 이름이 바뀐 것은 소유권 변경을 나타내기 위한 것이므로 둘 사이 큰 차이는 없다.

 

SSL/TLS를 사용하는 웹사이트의 URL에는 HTTP 대신 HTTPS가 있다.

SSL/TLS는 어떻게 작동하는가?

  • SSL은 높은 수준의 개인정보 보호를 제공하기 위해, 웹에서 전송되는 데이터를 암호화한다.
  •  
  • 따라서, 데이터를 가로채려는 자는 거의 해독할 수 없는 복잡한 문자만 보게 된다.
  •  
  • SSL은 두 통신 장치 사이에 핸드셰이크라는 인증 프로세스를 시작하여 두 장치의 ID를 확인한다.
  • SSL은 또한 데이터 무결성을 제공하기 위해 데이터에 디지털 서명하여 데이터가 의도된 수신자에 도착하기 전에 조작되지 않았다는 것을 확인한다.

SSL을 쓰는 이유는 ?

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

 

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

 

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

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

 

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

 

SSL의 통신 준비 과정

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

 

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

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

 

(3) 클라이언트는 서버 인증서를 받고 브라우저에 내장된 해당 CA의 공개키로 복호화 한 뒤, 이 인증서가 신뢰할만하다고 판단되 서버 인증서에서 서버 공개키를 추출한다.

즉 복호화 성공 시 인증서가 CA에 의해 발급된 것이 증명되고, 인증서를 전송한 서버도 CA가 보증하는 서버임이 증명된다.

 

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

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

*세션키(Pre master secret)는 서버에게 받은 랜덤 데이터 + 클라이언트 생성 랜덤 데이터를 조합해 특정값을 생성한다.

 

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

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

*Cipher Suite란?

 

위 그림에서처럼 1번 과정에서 클라이언트는 서버에게 Cipher suite 리스트를 보낸다. 

각 항목이 의미하는 바는 다음과 같다.

  • 키교환 알고리즘 : Server와 Client간 Key를 교환할 방식을 선정하는 것.
  • 인증 알고리즘 : Server와 Client간 교환한 인증서를 확인하는 알고리즘.
  • 대칭 암호 알고리즘 : 실제 데이터를 암호화 하는 알고리즘.
  • 블록 암호 운용 방식 : 데이터를 암호화 할때 한꺼번에 암호화 하는 것이 아니라 블록 단위로 암호화 하게 되는데, 블록된 암호화 패킷을 조합하여 데이터를 추측 하는 것을 방지하기 위한 방식.
  • 해시 알고리즘 : 서로 상대방이 암호화 한것이 맞는지 확인하기 위한 알고리즘.

 

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

 

reference

 

profile

만쥬의 개발일기

@KangManJoo

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