본문 바로가기

CS/Network

SSL Protocol 동작 방식

 (1) SSL Handshake Protocol

 - SSL Record 계층의 위에서 동작한다.   SSL Client Server가 처음으로 통신을 시작할 때 서로 프로토콜 버전을 확인하고암호 알고리즘을 선택하고선택적으로 서로를 인증하고공유할 비밀정보를 생성하기 위해 공개키 암호 기법을 사용한다.

     1) Hello Request

 - 이 메시지는 서버가 클라이언트에게 보낼 수 있는 메시지지만 핸드쉐이크 프로토콜이 이미 진행 중이면 클라이언트는 이 메시지를 무시해 버린다.

      2) Client Hello

 - 클라이언트는 서버에 처음으로 연결을 시도할 때 Client Hello메시지를 통해 클라이언트 SSL 버전클라이언트에서 생성한 임의의 난수세션 식별자, Cipher Suit 리스트클라이언트가 지원하는 압축방법 리스트 등의 정보를 서버에 전송한다.

 

    cipher_suites : SSL_키 교환 알고리즘_WITH_암호 알고리즘_해쉬 알고리즘

 

       ) SSL_RSA_WITH_NULL_MD5

           SSL_RSA_WITH_NULL_SHA

           SSL_RSA_EXPROT_WITH_RC4_40_MD5(Steam Cipher)

           SSL_RSA_WITH_RC4_A28_MD5

           SSL_RSA_WITH_RC4_128_SHA

           SSL_RSA_EXPROT_WITH_RC2_CBC_40_MD5(Block Cipher)

           SSL_RSA_WITH_IDEA_CBC_SHA

           SSL_RSA_WITH_DES_CBC_SHA

           SSL_RSA_WITH_3DES_EDE_EBC_SHA 

       3) Server Hello

 - 서버는 Client Hello 메시지를 처리한 후 Handshake Failure Alert 메시지 또는 Server Hello 메시지를 전송하게 된다이 단계에서 서버는 서버의 SSL 버전서버에서 생성한 임의의 난수세션 식별자클라이언트가 보낸Cipher Suit 리스트 중에서 선택한 하나의 Cipher Suit, 클라이언트 압축방법 리스트에서 선택한 압축 방법 등의 정보를 클라이언트에 보낸다.<?xml:namespace prefix = o /><?xml:namespace prefix = o /><?xml:namespace prefix = o />

       4) Server Certificate or Server Key Exchange

 - 서버 인증을 위한 자신의 공개키 인증서를 가지고 있다면, Server Certificate 메시지를 즉시 클라이언트에 전송한다일반적으로 X.509 버전 3 인증서를 사용한다만약 인증서가 없거나인증서를 가지고 있지만 서명용으로만 사용할 수 있다면(DSS 인증서서명용 RSA 인증서의 경우또는 Fortezza/DMS 키 교환을 사용한다면 Server Key Exchange 메시지 를 전송한다단 서버 인증서에 Diffie-Hellman 매개 변수가 포함되어 있다면 이 메시지는 사용되지 않는다이 단계에서 사용되는 인증서의 종류 또는 키 교환에 사용되는 알고리즘은 Server Hello 메시지의 Cipher Suit에 정의된 것을 사용한다.

       5) Certificate Request

 - 서버는 기본적으로 클라이언트에게 서버 자신을 인증할 수 있도록 한다이와 마찬가지로 서버는 클라이언트의 인증서를 요구하며 신뢰할 수 있는 클라이언트인지 확인할 수 있다이 단계는 선택적으로 동작하지만 4단계와5단계를 통해 클라이언트와 서버는 상호인증이 가능하게 된다.

       6) Server Hello Done

 - 서버에서 보낼 메시지를 모두 보냈음을 의미한다이 메시지를 클라이언트에 보내는 이유는 5단계의 메시지가 보내질 수도 있고생략될 수도 있기 때문이다따라서 이 메시지를 받은 클라이언트는 서버로부터 더 이상의 메시지 전송이 없음을 알수 있게 된다.

       7) Client Certificate

 - 서버로부터 클라이언트의 인증서를 보내라고 요청이 있을 경우 클라이언트 자신의 인증서를 보내야 한다만약 인증서를 가지고 있지 않다면 No Certificate Alert 메시지를 보낸다.

       8) Client Key Exchange

 - 이 단계에서 클라이언트는 세션키를 생성하는 데 이용되는 임의의 비밀정보인 48바이트pre_master_secret 생성한다그런 뒤 선택된 공개키 알고리즘에 따라 pre_master_secret 정보를 암호화하여 서버에 전송한다이때 RSA, Fortezza, Diffie-Hellman 중 하나를 이용하게 된다.

       9) Certificate Verify

 - 서버의 요구에 의해 전송되는 클라이언트의 인증서를 서버가 쉽게 확인할 수 있도록 클라이언트는 핸드 쉐이크 메시지를 전자서명하여 전송하게 된다이 메시지를 통해 서버는 클라이언트의 인증서에 포함된 공개키가 유효한지 확인하여 클라이언트 인증을 마치게 된다.

      10) Change Cipher Specs, Finished

 - Change Cipher Specs 메시지는 핸드 쉐이크 프로토콜에 포함되지 않지만 클라이언트는 마지막으로Change Cipher Specs 메시지를 서버에 전송하여 이후에 전송되는 모든 메시지는 협상된 알고리즘과 키를 이용할 것임을 알리게 된다그런 후 즉시 Finished 메시지를 생성하여 서버에 전송한다따라서 이 Finished 메시지에는 협상된 알고리즘 및 키가 처음으로 적용된다.

      11) Finished, Change Cipher Specs

 - 서버는 클라이언트가 보낸 모든 메시지를 확인한 후 Change Cipher Specs 메시지를 클라이언트에게 보낸 후 즉시 Finished 메시지를 생성하여 전송함으로써 SSL 핸드 쉐이크 프로토콜 단계를 종료하게 된다.

'CS > Network' 카테고리의 다른 글

L2-L4 헤더 구조  (0) 2016.04.27
Cisco 라우터 비밀번호 변경 방법  (0) 2015.02.02
DNS E-book  (0) 2010.06.25
Cisco Router 주요 명령어  (0) 2010.05.28
Packet 종류별 기본 크기  (0) 2010.03.06