ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TLS ( 1 / x)
    카테고리 없음 2016. 7. 9. 00:48
    https://namu.wiki/w/TLS 내용을 참조하여 작성하였습니다.

    1.개요
    인터넷에서 정보를 암호화해서 송수신하는 프로토콜. 넷스케이프 커뮤니케이션스사가 개발한 SSL(Secure Sockets Layer)에서 기반한 기술로, 국제 인터넷 표준화 기구에서 표준으로 인정받은 프로토콜이다. 표준에 명시된 정식 명칭은 TLS지만 아직도 SSL이라는 용어가많이 사용되고 있다.

    2.작동방법
    인터넷을 사용한 통신에서 보안을 확보하려면 두 통신 당사자가 서로가 신뢰할 수 있는 자임을 확인할 수 있어야 하며, 서로간의 통신 내용이 제3자에 의해 도청되는 것을 방지해야 한다. 따라서 서로 자신을 신뢰할 수 있음을 알리기 위한 전자 서명이 포함된 인증서를 사용하며, 도청을 방지하기 위해 통신 내용을 암호화 한다. 이러한 통신 규약을 묶어 정리한 것이 바로 TLS, 주요 웹브라우저 주소창에 자물쇠 아이콘으로 뜨는 것으로 TLS의 적용 여부를 확인할 수 있다.

    예를 들어 인터넷 뱅킹을 하기 위해 은행의 사이트를 방문했을 때, 고객은 그 사이트가 정말 은행의 사이트가 맞는지 아니면 해커가 만든 가짜 피싱 사이트인지 확인할 수 있어야 하며, 은행 역시 자신의 서비스에 접속한자가 해당 고객이 맞는지 아니면 고객의 컴퓨터와 서버사이에서 내용을 가로채고자 하는 해커인지 확인할 수 있어야 한다. 그리고 은행과 고객 간의 통신 내용이 다른 해커에게 도청되지 않도록 구체적으로 서로의 신원을 확인하기 위해 핸드세이크 과정을 거치며 다음과 같다

    HandShaking 
    1)  먼저 클라이언트에서 서버에 ClientHello 메시지를 보낸다. 여기에는 클라이언트에서 가능한 TLS 버전, 세션 식별자, 암호 설정등의 정보가 포함된다. 

    2) 클라이언트의 메시지를 받은 서버는 ServerHello 메시지를 클라이언트에게 보낸다. 여기에는 ClientHello 메시지의 정보 중 서버에서 사용하기로 선택한 TLS 버전, 세션, 식별자, 암호 등의 정보가 포함된다. 

    3) 서버가 클라이언트에 Certificate 메시지를 보낸다. 여기에는 서버의 인증서가 들어간다. 이 인증서는 별도의 인증 기관에서 발급받은 것이며, 서버가 신뢰할 수 있는 자임을 인증한다. 전송이 끝나면 ServerHelloDone 메시지를 보내 끝났음을 알린다. 

    4) 클라이언트는 서버에서 받은 인증서를 검증한다. 인증서의 유효 기간이 만료되지 않았는지, 그 인증서가 해당 서버에게 발급된 인증서가 맞는지 등을 확인한다. 인증서를 신뢰할 수 있다고 판단하였다면 다음 단계로 넘어간다.

    5) 클라이언트는 임의의 pre-master secret 을 생성한 뒤, 서버가 보낸 인증서에 포함된 공개키를 사용해 암호화한다. 이렇게 암호화된 pre-master secret을 ClientKeyExchange 메시지에 포함시켜 서버에 전송한다.

    6) 서버는 전송받은 정보를 복호화하여 pre-master secret을 알아낸 뒤, 이 정보를 사용해 master secret을 생성한다. 그 뒤 master secret에서 세션 키를 생성해내며, 이 세션 키는 앞으로 서버와 클라리언트 간의 통신을 암호화하는데 사용할 것이다. 물론 클라이언트 역시 자신이 만들어낸 pre-master secret을 알고 있으므로 같은 과정을 거쳐 세션 키를 스스로 만들 수 있다.

    7) 이제 서버와 클라이언트는 각자 동일한 세션 키를 가지고 있으며, 이를 사용해 대칭 키 암호를 사용하는 통신을 할 수 있다. 따라서 우선 서로에게  ChangeCipherSpec 메시지를 보내 앞으로의 모든 통신 내용은 세션 키를 사용해 암호화해 보낼 것을 알려준뒤, Finished 메시지를 보내 각자의 핸드세이킹 과정이 끝났음을 알린다.

    8) 이제 서버와 클라이언트 간의 보안 통신이 구성된다. 

    경우에 따라 클라이언트에서 서버의 인증서를 요구하는 것 뿐만 아니라 서버에서 클라이언트의 인증서를 요구하기도 한다.

    쉽게 요약해서, 먼저 서로가 어떤 TLS 버전을 사용 가능한지 확인하고, 인증서를 사용해 서로가 믿을 수 있는지 확인한 뒤, 서로간의 통신에 쓸 암호를 교환하는 것이다. 그 다음부터는 서로 교환한 암호를 사용해 제3자가 도청할 수 없는 암호화된 통신을 하면 된다.

    대신 일반 통신에 비해 크고 아름다운 패킷을 사용하는 암호화 통신인 만큼 속도상의 손해가 발생하게 된다. 플래시나 큰 이미지가 많은 사이트에서 TLS를 쓰는 것은 그야말로 헬게이트,, 사실 이것을 간과할 수 없는 게, HTTPS로 연결된 페이지에서 한 개라도 구성 요소 중 HTTP로 로드하는 것이 잇다면, 웹 브라우저가 네 컴퓨터의 통신이 암호화 안된 요소에 침식당하기 시작해서 위험해라면서 보안경고를 뿜어대기 때문이다. 최신 브라우저는 이것도 모자라서 강제로 암호화되지 않은 요소는 로딩에서 제외해버리기도 한다. 웹상의 모든 요소를 암호화해야 하기 때문인지 외국 홈페이지느 ㄴ화려하게 치장하기에 열을 올리는 국내 페이지에 비해 깔끔한 편이다. 


Designed by Tistory.