본문 바로가기

Study

SSL 과 TLS, HTTPS

<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

http://imp51.tistory.com/59

http://blog.naver.com/leonard21/20057515630

http://minix.tistory.com/397

'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