SSL[Secure Socket Layer]
말 그대로, 안전한 소켓을 위한 층을 말한다. IP Sec 처럼 원래 있단 층을 수정, 교정하는 방식이 아닌.
새로운 층을 만들어서 기밀성과 인증을 제공하는 개념이다.
새로운층에서 단편화, 압축, 인증, 암호화 등을 수행하게 된다.
우리가 안전한 사이트에 들어가면 나오는 HTTPS와 같은 경우가 대표적인 예이다.
SSL의 구성
해당 층은 2개의 층으로 세분화 되어 진다. 하나의 층은 제어 프르토콜[Control Protocol]과 관련된 상위 층, 다른 하나는
실제 암호화, 압축, 무결성 등을 제공하는 레코드 층[Record Layer]으로 나누어진다.
SSL Key 관계와 용어 정리
사전마스터키[PreMasterKey] : 클라이언트 측에서 생성하는 사전 키이다. 해당 키를 이용하여서
나중에 record layer에서 사용하는 암호화, 무결성 검증 등에 사용되는 MasterKey 생성에 사용
Server Random 값, Client Random 값 : 각 각 Server와 Client에서 생성하는 랜덤 값으로 이도 역시 MasterKey 생성에 사용 된다.
마스터키[MasterKey] : 사전 마스터키[PreMasterKey]와 Server, Client 랜덤 값을 이용해서 생성되어 진다.
해당 키는 실제 암호화, HMAC 같은 곳에 사용되어진다.
SSL 세부 동작 과정
1. Client Hello [Client-> Server]
내용 :client random, 암호 알고리즘 리스트, 압축 알고리즘 리스트, 세션 아이디, SSL 버전
이유 : 세션 아이디의 경우 공개키를 계속해서 생성 하면 비효율, 세션 아이디를 이용해서 공개키를 관리 함
client random값의 경우에는 master key를 생성시 필요함
2. Server Hello [Server -> Client]
내용 : Server random 값, 클라이언트가 보낸 암호, 압축 알고리즘을 선택해서 통보, 세션 아이디, SSL 버전
--> 서버측에서는 알고리즘을 선택하고, 역시 master key를 생성하는 서버 난수 값 등 응답한다.
3. Server Certificate and Server Key Exchange [Server -> Client]
3-1서버의 인증서가 사용가능 한 경우
서버가 클라이언트에게 자신의 인증서를 보내준다.
이를 통해서 클라이언트는 서버의 인증된 공개키를 획득 하게된다.
해당 공개키는 사전마스터키[PreMasterKey]를 암호화해서 보낼때 사용된다.
3-2 서버의 인증서가 사용 불가능 한 경우
Key Exchange 과정을 거친 후
--> 해당 과정은 정확하지 않지만 인증서가 없을 경우 Diffihelman과 같은걸 이용해서
--> 키 교환을 완료 한 후, 해당 교환 정보를 이용해서 서명을 검증 하는 방식을 이용한다.
4. [선택 사항] Certificate Request [Server -> Client]
서버가 클리이언트를 인증하고 싶을 때 거치는 단계이다.
서버는 클라이언트에게 자신인 인증 가능한 인증서 목록을 클라이언트에게 전송하고
인증서를 요구한다.
5. ServerHello Done [Server -> Client]
서버에서 하는일은 모두 끝났다는 것을 알려줌
이제 클라이언트가 동작할 차례임을 알려줌
6. [4번이 선행되어진 경우] Certificate [Client -> Server]
앞서 서버가 클라이언트의 인증서를 요구한 경우. 클리어은트는 자신의 인증서를
서버에 전송해준다.
7. Client Key Exchange [Client -> Server]
클라이언트에서는 앞서 받은 서버의 인증서를 검증한다. 이를 통해서 서버의 공개키를 획득한다.
그리고 해당 서버의 공개키로 사전 마스터키[PreMasterKey]를 암호화 한 후,
암호화된 내용을 서버에 전송하는 과정을 말한다.
8. Certificate Verify [Client -> Server] --> 햇갈림
Client가 자신의 인증하기 위한 경우에 사용된다. 6번과 같은데 선택사항인지 아닌지는 잘 모르겠다.
앞선 교환으로 인해서 클라이언트는 MasterKey를 생성 할 수있다.
그렇기 때문에 완성된 MasterKey와 클라이언트 개인키를 이용해서 서명을 생성한 후 보낸다.
9. Change Cipher Spec [Client -> Server]
서버에게 이제 본격적으로 통신 하자는 의미로 보내는 것이다.
앞서 선택한 암호 알고리즘, 키, 압축 알고리즘을 사용 하자라는 의미이다.
10. Finished [ Client -> Server ]
모든게 끝났다라는 의미와 인증을 할 수 있는 수단을 전송.
생성한 MasterKey를 이용해서 앞서 통신한 메시지 내용을 HMAC을 보낸다.
이를 보낼 경우 서버도 MasterKey를 생성 할 수있고 이를 확인 할 수있기 때문이다.
11. Change Cipher Spec [Server -> Client]
클라이언트에게 역시 아까 협상한 알고리즘들을 이용해서 통신하자는 의미로 전송한다.
12. Finished[Server -> Client]
역시 MasterKey를 생성해서 앞서 통신한 내용을 HMAC을 생성해서 보낸다.
여기서의 의미는 MasterKey를 생성 했다는 것은 7번에서 보낸 서버의 공개키를
서버의 개인키로 복호화 했다는 것임을 알 수있다.
이를 통해서 Client는 Server를 인증 할 수 있게 된다.
좀 더 틈틈히 공부 한다음 더 정확한 내용을...
'학부_대학원 > 네트워크' 카테고리의 다른 글
IDS vs Firewall (0) | 2016.08.08 |
---|---|
IPSec [1] (0) | 2016.08.05 |
DNS[Domain Name System] (0) | 2016.08.02 |
네트워크 [신뢰성 대 비신뢰성] (0) | 2016.08.02 |
네트워크 [비연결 vs 연결 지향 ] (0) | 2016.08.02 |