HTTPS

김석·2023년 5월 27일
0

Security

목록 보기
5/6

1. HTTPS란?

  • Hypertext Transfer Protocol Secure
  • 인터넷에서 데이터를 전달하는 TCP 프로토콜의 일종인 HTTP에 Secure 기능을 더한 것.
  • TLS(Transport Layer Security) or SSL(Secure Socket Layer)를 사용하여 암호화된 프로토콜.

TLS? SSL?

  • TLS는 SSL의 개선된 버전으로, 최신 인증서는 대부분 TLS를 사용하지만, 편의상 SSL 인증서라고 말함.
  • TCP, UDP와 같은 일반적인 인터넷 통신에 안전한 계층(layer)를 추가하는 방식.
  • 이 기술을 구현하기 위해 웹 서버에 설치하는 것이 SSL/TLS 인증서.

HTTPS가 필요한 이유

  • 브라우저와 웹 서버 간 데이터를 암호화.
  • 접속한 웹 사이트가 믿을만한지 검증.

2. HTTPS에 필요한 것들

  • 웹 브라우저는 공신력 있는 CA(Certificate Authority, 인증 기관)의 정보와 CA의 공개키를 브라우저 내부에 보관함.
  • 웹 서버는 CA(Certificate Authority)에서 SSL/TLS 인증서를 발급받아야 함.
    1. 서버에서 공개키와 개인키를 생성함.
    2. 인증서를 발급받기 위해서 서버는 서버의 공개키와 각종 정보를 CA로 전송함.
    3. CA는 서버의 공개키와 정보를 담아 SSL 인증서를 발급함.
    4. CA에도 개인키와 공개키가 존재함. CA는 해당 SSL 인증서를 CA의 비밀키로 암호화함.
    5. CA는 CA의 비밀키로 암호화된 SSL 인증서를 서버로 전송함.

2. SSL Handshake 과정

  • handshake를 통해 서버와 클라이언트는 통신을 위한 정보를 주고 받음.
  • 신뢰할 수 있는 서버인지 검증하고, 암호화 알고리즘을 결정함.
  • SSH처럼, 서버와 클라이언트가 주고 받을 데이터의 암호화를 위한 대칭키를 얻음.

2-1. Client -> Server (Client Hello)

  • 브라우저가 웹 서버에 요청
  • 브라우저는 다음 정보를 Client Hello 단계에서 서버로 전송함
    • 브라우저가 사용하는 SSL/TLS 버전 정보
    • 브라우저가 지원하는 암호화 방식 모음(cipher suite들)
    • 브라우저가 생성한 임의 난수(client random)
    • 이전에 SSL handshake가 완료된 상태라면, 그 때 생성된 세션 아이디
    • 기타 정보

2-2. Server -> Client (Server Hello)

  • 웹 서버가 브라우저로 응답
  • 웹 서버는 다음 정보를 Server Hello 단계에서 서버로 전송함
    • 브라우저의 암호화 방식 정보(cipher suite)들 중에서 서버가 지원하고 선택한 1개의 암호화 방식
    • 서버가 생성한 임의 난수(server random)
    • 기타 정보

2-3. Server -> Client (Certificate, Server Key Exchange, Server Hello Done)

  • 서버는 클라이언트에 Certificate(SSL 인증서)라는 패킷을 보냄.
  • 클라이언트는 서버의 공개키를 알아야 한다.
  • 만약 Certificate 내부 SSL 인증서에 서버의 공개키가 없는 경우, Server Key Exchange를 통해 서버의 공개키를 직접 전달함.
  • SSL 인증서 내부에 서버의 공개키가 존재한다면 Server Key Exchange는 생략됨.
  • 서버가 행동을 마쳤다는 의미로 Server Hello Done 응답을 마지막으로 보냄.

2-4. Client에서 Server의 SSL 인증서 검증

  • 클라이언트 브라우저는 SSL 인증서를 발급하는 주요 인증기관(CA)의 리스트와 공개키를 가지고 있음.
  • 서버에게서 받은 SSL 인증서를 해당 인증서를 암호화했던 CA의 공개키를 찾아 복호화함.

여기까지 과정을 통해서 해당 웹사이트가 믿을만한지 검증할 수 있음.
브라우저와 웹 서버 간 전송되는 데이터를 대칭키(비밀키, SSH에서 세션키와 같은 역할)를 통해 암호화해야 함.


2-5. Client -> Server 대칭키 전달 (Client Key Exchange, Change Ciper Spec)

  • 클라이언트는 임의의 숫자 pre-master secret를 생성함.
  • 이를 서버의 공개키로 암호화하여 서버에 전달함. (Client Key Exchange)
  • 서버에서는 암호화된 pre-master secret을 서버의 개인키로 복호화함.
  • Client와 Server에서는 client random, server random, pre-master secret을 통해 대칭키를 유도함.
  • 이 과정을 통해 서버와 클라이언트는 안전하게 같은 대칭키를 생성할 수 있음.
  • 모든 준비가 끝남. 따라서 클라이언트는 Change Cipher Spec을 통해 SSL Handshake의 완료를 알림.

2-6. Server / Client SSL Handshake Finished

  • 서버는 서버의 개인키를 통해 복호화된 대칭키를 얻을 수 있음.
  • 서버와 클라이언트가 서로 동일한 대칭키를 가지고 있기 때문에, 암호화된 통신이 가능해짐.
  • 서버 측에서도 통신할 준비가 완료되었다는 Change Ciper Spec을 보냄.

3. 굳이 대칭키를 쓰는 이유?

  • 비대칭키를 사용하여 암호화 복호화하는 것에 컴퓨팅 자원이 더 많이 소모되기 때문.
  • 따라서 SSL Handshake 단계까지는 비대칭키 방식을 사용하고, 그 이후 HTTPS 통신은 대칭키 방식을 사용함.

출처

https://yozm.wishket.com/magazine/detail/1852/
https://jaeseongdev.github.io/development/2021/07/02/HTTPS,SSL,TLS/
https://nuritech.tistory.com/25
https://inuplace.tistory.com/1086#cf.-ssl-vs-tls
https://dokydoky.tistory.com/463
https://www.youtube.com/watch?v=tQaxITImKys
https://www.youtube.com/watch?v=H6lpFRpyl14

profile
handsome

0개의 댓글