✊ 필오의 개발일지
Back to Posts
2019년 12월 8일

HTTPS의 세부사항

HTTPS의 세부사항

최근 인증서 관련 이슈를 만난적이 있었는데, 이번 장을 통해서 조금이나마 이해가 될 수 있게 되었다 :)


HTTPS 세부사항

1. HTTPS 스킴

https://feel5ny.github.io

2. 보안 전송 셋업

HTTP

HTTP에서는 클라는

  1. 웹서버의 80번 포트로 TCP 커넥션을 열고,
  2. 요청메세지를 보내고,
  3. 응답메세지를 받고,
  4. 커넥션을 닫는다.

HTTPS

HTTPS에서는 클라는

  1. 웹서버의 443번 포트로 연결한다. TCP 연결이 되고나면,
  2. 클라와 서버는 암호법 매개변수와 교환 키를 협상하면서 SSL 계층을 초기화한다.
  3. 핸드셰이크가 완료되면 SSL 초기화는 완료되며 클라는 요청 메세지를 보안계층에 보낼 수 있다. 이 메세지는 TCP로 보내지기 전에 암호화된다. 암호화된 요청을 보낸다.
  4. SSL을 통해 보내진 HTTP 요청 / TCP를 통해 보내진 암호화된 요청
  5. SSL 닫힘을 통지한다.
  6. TCP 커넥션이 닫힌다.

3. SSL 핸드셰이크

실제로 좀더 자세히 보면..

출처 

3.1 예시로 알아보기

www.bing.com에  접속할 때 SSL 핸드쉐이크 과정을 와이어 샤크를 보면서 알아보자.

  1. (클 => 서버) Client Hello
  2. (서버 => 클) Server Hello
  3. (서버 => 클) Certificate
  4. (서버 => 클) Certificate Status
  5. (서버 => 클) Server Key Exchange
  6. (서버 => 클) Server Hello Done
  7. (클 => 서버) Client Key Exchange
  8. (클 => 서버) Change Cipher Spec
  9. (클 => 서버) Encrypted Handshake Message
  10. (서버 => 클) Change Cipher Spec
  11. (서버 => 클) Encrypted Handshake Message


1. (클 => 서버) Client Hello

2. (서버 => 클) Server Hello

3. (서버 => 클) Certificate


4. (서버 => 클) Certificate Status

5. (서버 => 클) Server Key Exchange

6. (서버 => 클) Server Hello Done

7. (클 => 서버) Client Key Exchange

8. (클 => 서버) Change Cipher Spec

9. (클 => 서버) Encrypted Handshake Message(Finished)

10. (서버 => 클) Change Cipher Spec

11. (서버 => 클) Encrypted Handshake Message(Finished)

12. 어플리케이션 데이터

4. 서버 인증서

5. 사이트 인증서 검사

1. 날짜 검사

2. 서명자 신뢰도 검사

3. 서명 검사

4. 사이트 신원 검사

6. 가상 호스팅과 인증서

잘 모르겠다.



HTTPS 예시 (feat. OpenSSL)

OpenSSL

온라인 중개소의 홈페이지에 접속했을 때

clients1.online.msdw.com 의 사이트라고 가정

  1. SSL 컨텍스트가 초기화 되었다.
  2. clients1.online.msdw.com의 IP주소: 63.151.15.11
  3. 호스트 clients1.online.msdw.com, 포트 443으로 TCP 커넥션을 열었다.
  4. SSL endpoint가 생성되었으며 핸드셰이크 완료
  5. 다음의 암호로 SSL 연결이 됨: DES-CBC3-MD5
  6. 서버 인증서를 받았다.
대상: /C=US/ST=Utah/L=Salt Lake City/O=Morgan Stanley/OU=Online/CN=clients1.online.msdw.com 발급자: /C=US/O=RSA Data Security, Inc./OU=Secure Server Certification Authority
  1. 암호화된 채널을 통해 HTTP 요청을 보냈다.
GET / HTTP/1.0 Host: Clients1.online.msdw.com:443 Connection: close
  1. HTTP응답에서 615바이트를 가져왔다.
HTTP/1.1 302 Found Date: Sat, 09 Mar 2002 09:43:42 GMT Server: ... Location: ... Connection: close Content-Type: text/html; ... ...
  1. 모두 끝났으므로 커넥션을 닫고 정리한다.


프락시를 통한 보안 트래픽 터널링 (HTTPS SSL 터널링 프로토콜)



참고자료

Previous2019 회고 + 2020 다짐 (feat. 글또)
Next다이제스트 인증(2) - 실제 다이제스트 인증과 보안

Related

© 2025 Felix