(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 |