티스토리 뷰

linux 기초 - SSL, TLS



  SSL 와 TLS




  SSL( Secure Sockets Layer, SSL )이란 보안 소켓 계층을 이르는 것으로, 인터넷 상에서 데이터를 안전하게 전송하기 위한 

  인터넷 암호화 통신 프로토콜을 말한다. SSL 프로토콜은 처음에 Netscape사에서 웹 서버와 웹 브라우저 사이의 보안을

  위해 만들었다. SSL은 CA( Certificate Authority )라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다.


  즉, 클라이언트와 서버간 응용계층 및 TCP 전송계층 사이에서 안전한 보안 채널을 형성해 주는 역활을 수행하는 보안용

  프로토콜이라고 생각하면 된다. 1.0버전은 공개 된적이 없고, 2.0버전이 1995년 2월에 이르러서야 릴리즈가 된다.

  

  그러나 이 버전은 많은 보안 결함 때문에 3.0버전으로 곧바로 이어지고, 1996년 버전 3.0으로 릴리즈 된다.

  이 후 3.0버전은 TLS ( Transport Layer Security )1.0의 기초가 되고 1999년 1월 IETF에서 RFC2246 표준 규약으로 

  정의하게 된다. 마지막 갱신은 RFC 5246이다.  TLS는 SSL 3.0을 기반으로 발표 되었기 때문에, SSL과는 아주 근소한 

  차이를 빼고는 거의 같다고 볼 수 있다. 


  즉, SSL 및 TLS는 본질적으로 같으며 버전이 다른 정도라고 생각하면 된다.


     SSL의 변화


     SSL 1.0 → SSL 2.0 → SSL 3.0 → TLS1.0 → RFC 2246( 표준 규약 )


     SSL의 확인


↑ 흔히 볼 수 있는 SSL

 

  ㆍ URL 옆의 자물쇠 표시

   http 대신 https URL 접두사

   녹색 주소창

   트러스트 씰


     주요 응용

    

     - 웹 브라우저와 웹 서버 사이의 안전한 보안 채널을 제공하기 위해 많이 사용됨

      ㆍ HTTP ( HTTPS )

      ㆍ FTP

      ㆍ SMTP

      ㆍ SIP 등등

   


  SSL / TLS 주요 기능

  

  # 상호 인증 : 공개키 인증서( public key )를 이용한 서버, 클라이언트의 상호 인증

    - 클라이언트/서버 두 응용 간에 상대방에 대한 인증


  # 메세지 압축

    - 디폴트 Null ( 압축 알고리즘은 미리 정해지지 않고 협상으로 지정 가능 )


  # 암호화용 세션 키 생성( 대칭 키 합의 )을 위한 키 교환

    - RSA : 두 키( 공개 키 및 개인 키 )가 하나의 수 체계를 형성 ( 서버 공개 키 사용 )

    - Diffie-Hellman : Diffie-Hellman 프로토콜 기반으로 한 키 교환 방식


  # 생성된 공유 비밀키에 의해 암호화된 종단간 안전한 연결통로 제공( 보안 채널 )

    - 스트림 암호화 : 40, 120 Bit의 RC4

    - 블록 암호화 : IDEA, 40,56 Bit의 DES, 168 Bit의 3DES



  SSL / TLS 보안 특징


  # 인증 구조 : X.509

    - X.509에서 규정된 공개키 인증 교환에 의해 상대방에 대한 인증 수행

    - X.509란? 공개키 기반 구조의 인증 서비스를 구현하기 위한 인증 틀


  # 키 교환 방식 ( 협상 선택 가능 )

    - Null, RSA 공개 키 교환, Anonymous Diffie-Hellman  키 교환,

      Fixed Diffie-Hellman 키 교환, Fortezza


  # 대칭 키 암호화 방식 ( 형삽 선택 가능 )

    - RC2 ( 40 ) , RC4 ( 40 ) , RC4 ( 128 ), DES, 3 DES, IDEA 등


  # 해쉬 알고리즘 ( 협상 선택 가능 )

   - Null, MD5, SHA-1



  ↑SSL에서 사용하는 암호 알고리즘




  SSL / TLS 프로토콜 스택



  ↑SSL 프로토콜 계층 구조



  SSL은 OSI 7계층 모델의 어느 한 계층에 속해서 동작하는것은 아니다. 응용계층과 전송계층 사이에 독립적인 프로토콜

  계층을 만들어서 동작하며 이때 응용계층의 프로토콜들은 외부로 보내는 데이터를 TCP가 아닌 SSL에 보내게되고,

  SSL은 받은 데이터를 암호화하여 TCP에 보내어 외부 인터넷으로 전달하게 되는 방식이다.


  전달 받을 때 역시, TCP로부터 받은 데이터를 복호화하여 응용계층에 전달하게 되는데, 이 과정에서 Application은

  SSL을 TCP로 인식하고, TCP는 SSL을 Application으로 인식하기 때문에, Application과 TCP 사이의 데이터 전달 방식은

  기존 전달 방식을 그대로 사용하게 된다.


     - 전송 계층 TCP 위에서 ' 보안 소켓 /  보안 채널 / 터널링 '을 구성한다.

      ㆍ 응용계층에서 생성된 데이터에 대한 보안( 인증, 무결성, 기밀성 ), 압축 등의 서비스를 제공

      ㆍ SSL/TLS 보안 터널을 위한 TCP/UDP 포트 번호 : 보안 HTTP( HTTPS )를 위한 포트번호 443




     주요 통신 방법 : Handshake Protocol

    

     - 초기 협상 단계

      ㆍ 클라이언트, 서버 간에 메세지 교환

      ㆍ 클라이언트가 서버에게 Cipher Suite (  사용가능 암호화, 해싱 방식 등 )을 보내고 서버 인증서를 요구


     - 인증 단계

      ㆍ 서버에서 공개키, 서버명, 인증기관 주소 등을 포함한 인증서를 클라이언트에게 전송

      ㆍ 이때 서버는 클라이언트가 제시한 것 중 자신이 선택한 암호화 방식 및 인증서를 보낸다.

      ㆍ 필요시 클라이언트는, 인증서를 발급한 인증기관 서버에 접속하여 서버 인증서의 유효성을 확인한다.


 인증서 구성

 1. 인증서 소유자의 e-mail  주소

 2. 소유자의 이름 

 3. 인증서의 용도 

 4. 인증서 유효 기간 

 5. 발행 장소  

 6. Distinguished Name ( DN )

   - common Name ( CN )

   - 인증서 정보에 대해 서명한 사람의 디지털 ID 

 7. 공개키( Public key ) 

 8. 해쉬 ( Hash )

  ↑인증서 구성

    # 인증서의 발행 기관을 Root Certification Authority( Root CA )라고 부르며, 유명한 인증 기관의 Root CA는 웹 브라우저에 기본적으로

       설치 되어있다.

    # 로그인 및 암호, 금융 정보, 개인 정보등 중요 정보들을 이용할때 인증서가 필요하다.


     - 보안 채널 형성

      ㆍ 클라이언트는 보안 채널 형성에 필요한 세션키를 만들기 위해 서버의 공개키를 이용하여 

          임의의 수 ( Pre Master Key )를 암호화시켜 서버에게 전송한다.

      ㆍ 서버는 자신의 비밀키 ( 개인키 )로 이를 해독하게 된다.

      ㆍ 이때 임의의 수로 부터 Master Key를 유도하고, 이 Master Key로 부터 양측은 암호화, 복호화에 필요한

          세션키를 생성한다.





  SSL 통신 절차 / 작동 과정



  1. 웹 브라우저 는 SSL로 암호화된 페이지를 요청한다. ( 일반적으로 https://가 사용 된다. )

  2. 웹 서버는 Public Key를 인증서와 함께 전송한다.

  3. 웹 브라우저는 인증서가 자신이 신용이 있다고 판단한 CA( 일반적으로 trusted root CA 라고 불림 )로부터 서명된

     것인지 확인한다. 또한 날짜가 유효한지, 그리고 인증서가 접속하려는 사이트와 관련되어 있는지 확인한다.

  4. 웹 브라우저는 Public Key를 사용해서 랜덤 대칭 암호키( Random sysmmetric encryption key )를 비롯한 

     URL,  http 데이터들을 암호화해서 전송한다.

  5. 웹서버는 Private Key를 이용해서 랜덤 대칭 암호화키와 URL, http 데이터를 복호화 한다.

  6. 웹서버는 요청받은 URL에 대한 응답을 웹 브라우저로부터 받은 랜덥 대칭 암호화키를 이용하여 암호화해서 브라우저로

     전송한다.

  7. 웹 브라우저는 대칭 키를 이용해서 http 데이터 와 html문서를 복호화 하고, 화면에 정보를 뿌려준다.
















참조-----------------------------------

ㆍhttp://m.blog.naver.com

wikipedia.org

http://www.ktword.co.kr