<SSL>
- Secure Socket Layer
- 웹 브라우저와 웹 서버간 데이터를 안전하게 주고받기 위한(=웹 보안) 업계 표준 프로토콜로 넷스케이프에서 개발.
- 국제 인터넷 표준화 기구에서 표준화 기술로 인정 받으면서 TLS로 명칭이 정해졌으나, SSL로 많이 불린다.
<TLS>
- Transport Layer Security
- 서버와 클라이언트가 보안을 위해 서로의 신원을 확인하고, 둘 사이에서만 사용될 세션 키를 정하는데 이를 HandShake 과정이라 함.
[서버와 클라이언트 사이의 HandShake Protocol]
이미지 출처: http://s2kiess.blog.me/220388132955
1. ClientHello: 클라이언트가 서버에 자신이 사용할 수 있는 TLS 버전, 세션 식별자, 사용 가능한 암호방식 등의 정보를 전송.
2. ServerHello: 서버는 클라이언트가 보낸 TLS 버전 중 하나를 고르고, 세션 식별자, 암호 설정 등의 정보를 클라이언트에 보낸다.
3. Certificate: 서버 인증서를 클라이언트에 보내는 과정.
3-1. Server Key Exchange: 인증서가 없거나 서명용인 경우, Fortezza/DMS 방식을 사용할 경우 이 방식을 이용.
4. Certificafe Request: 클라이언트가 서버의 인증서가 유효한지 확인할 수 있도록 함. 동시에 클라이언트에게 인증서를 요구하기도 한다.
5. ServerHelloDone: 서버에서 보낼 메시지를 모두 보냈다는 의미.
6. Certificafe: 서버가 인증서를 요청한 경우 클라이언트도 서버에 인증서를 전송한다. 전송할 인증서가 없을 경우 No Certificate Alert을 보냄.
7. ClientKeyExchange: 클라이언트는 pre-master secret 생성한 후 서버의 인증서에 포함된 공개키를 이용해 암호화 한다.
이를 ClientKeyExchange 메시지에 포함시켜 서버에 전송함.
8. Certificate Verify: 서버가 클라이언트의 인증서를 쉽게 확인할 수 있도록 HandShakeMessage를 전자서명하여 발송.
이 메시지를 통해 서버는 클라이언트의 인증서에 포함된 공개키가 유효한지 확인하여 인증을 마치게 된다.
8-1. master secret: 서버는 클라이언트가 보낸 메시지를 복호화해 pre-master secret을 알아내고, 이를 통해 master secret을 생성.
클라이언트도 같은 방법으로 master secret을 생성. master secret을 통해 세션 키를 만들고, 이를 통해 정보를 암호화한다.
9. Change CipherSpec, Finished: 이후에 보내는 메시지는 모두 인증된 키와 알고리즘을 사용중이라는 것을 알리는 과정.
또한 메시지를 보낸 직후, Finished 메시지를 보낸다.
<HTTPS>
- TLS를 이용해 HTTP를 암호화하는 것. 기본 포트는 443번을 사용한다.
[참고 사이트]
http://s2kiess.blog.me/220388132955
'Study' 카테고리의 다른 글
[Python] Pycharm 프로젝트 생성 및 Python 버전 설정 (0) | 2017.04.30 |
---|---|
[Python] Python 설치 ~ Pycharm 설치 (0) | 2017.04.30 |
OSI 7계층 (0) | 2017.01.10 |
TCP와 UDP (0) | 2017.01.08 |
MVC 패턴 (0) | 2016.12.11 |