HTTP VS HTTPS

Previous

TL;DR




HTTP vs HTTPS

HTTP



HTTPS



HTTPS의 동작 과정




SSL (Secure Sockets Layer)


암호화


1) 대칭키


2) 공개키


3) 대칭키와 공개키를 이용한 SSL 암호화 기법

  1. B는 A의 공개키를 이용해 B의 대칭키를 암호화 해서 전달
  2. A도 위와 같은 절차 수행
  3. A와 B는 서로의 대칭키를 보유하고 있기 때문에 서로의 대칭키로 암호화해서 전달 가능
    • 서로의 대칭키로 암호화를 하기 때문에 비용 감소 (공개키 단점 보완)
    • 공개키 방식을 통해 키 전달의 보안 위험 해결 (대칭키 단점 보완)


실제 사용 시나리오

  1. 인터넷 사이트는 자신의 정보와 공개키를 인증기관(CA)에 제출

  2. 인증기관은 검증을 거친 후 사이트 정보와 공개키를 인증기관의 개인키로 암호화 (사이트 인증서)

  3. 인증기관은 웹 브라우저에게 인증기관의 공개키를 제공

  4. 사용자가 웹 브라우저로 사이트 접속 시, 사이트는 인증서를 웹 브라우저에게 보냄

    (사이트 인증서에는 인증기관의 개인키로 암호화된 사이트의 정보 및 공개키가 있음)


  5. 웹 브라우저는 인증 기관의 공개키로 서버 인증서를 해독해 검증

  6. 여기서 얻은 사이트 공개키로 웹 브라우저의 대칭키를 암호화해서 보냄

  7. 사이트는 공개키로 암호화 된 내용을 개인키로 복호화해서 사용자의 대칭키를 얻음

  8. 사이트와 웹 브라우저는 서로의 대칭키를 이용해 암호문을 주고 받음


☝️ 여기서 잠깐!

SSL 인증서 발급 과정

  • 서버는 인증기관(CA)에 돈을 지불하고, 공개키를 저장하는 인증서 발급을 요청
  • CA 기업은 CA 기업의 이름, 서버의 공개키, 서버의 정보 등을 기반으로 인증서를 생성하고 CA기업의 개인키로 암호화해 전달


✌️ 여기서 잠깐!

CA(Certificate Authority) 는 누가 하나?

아무 기업이나 할 수 있는 것이 아니라 신뢰성이 엄격하게 공인된 기업들만 참여할 수 있다.

IdenTrust with 48.9 / DigiCert with 18.7 / Sectigo with 15.5 - (위키피디아 참조)




TLS(Transport Layer Security)

☝️여기서 잠깐! SSL은 Netscape에서 만든 솔루션으로 ver3.0이 나왔을 때, IETF에서 인터넷 표준을 정하자면서 TLS를 제안했다. TLS 버전 1.0은 SSL 버전 3.1로서 개발을 시작했지만 Netscape와 더 이상 연관이 없음을 명시하기 위해 발표 전에 프로토콜의 이름이 변경되었음. 다만 SSL과 TLS 용어를 혼용해서 많이 사용함.


제공하는 보안 서비스

  1. 기밀성 : 대칭키 암호화 방식을 사용하게 되면 기밀성을 제공할 수 있습니다.
  2. 무결성 : 메시지 인증 코드(MAC)를 통해 메시지 위/변조 여부 확인 가능
  3. 인증 : 연결 초기 설정에서 주고 받는 인증서를 통해 신뢰할 수 있는 서버인지 인증가능


☝️여기서 잠깐!

MAC: Message Authentication Code 이란?

  • 상대방이 보낸 암호화데이터가 변조된 것인지, 아닌지를 판단하는 역할
  • 메시지 + 대칭키를 MAC 알고리즘을 적용하여 MD(Message Digest) 생성 후 메시지와 함께 보냄
  • 수신자는 전달받은 메시지를 대칭키와 함께 MAC 알고리즘을 적용시켜 MD 생성 후 자신이 받은 MD와 일치여부 검증


TLS의 세부 프로토콜

스크린샷 2022-10-03 오후 8 59 27




TLS 핸드셰이크


스크린샷 2022-10-03 오후 8 15 16


1. Client Hello


2. Server Hello


3. Server certificate (서버 인증서 확인)

대부분의 브라우저에는 공신력 있는 CA들의 정보와 CA가 만든 공개키가 이미 설치되어 있다. 그래서 서버가 보낸 SSL 인증서가 정말 CA가 만든 것인지 확인하기 위해 내장된 CA 공개키로 암호화된 인증서를 복호화해본다.


4. Client key exchange (pre-master-secret 전달)


5. Pre-master Secret 복호화


6. Handshake 종료 및 HTTPS 통신 시작



HSTS(HTTP Strict Transport Security)


HSTS 기능을 사용하는 목적

리다이렉트 응답을 통한 HTTPS 강제 방법의 한계

즉 사용자가 실수로 HTTPS Protocol을 지원하는 Site를, HTTP Protocol로 접속 했을 때, 중간자 공격에 의해, HTTP Protocol을 사용한 통신을 하게 되고, 이로 인해 통신 정보가 공격자에게 노출이 되는 것을 방지하고자 하는 목적


HSTS 기능의 동작

  1. 클라이언트가 HTTP로 접속을 시도하는 경우, 먼저 브라우저에서 HSTS 설정된 도메인인지 확인(HTTP 요청 보내지 않음)
  2. HSTS된 사이트에 대해 브라우저는 HTTPS로 서버에 요청한다. (중간자는 SSL로 암호화된 패킷을 도청할 수 없다.)
  3. 서버가 HTTPS 요청에 대한 응답을 보낸다.
    • 웹서버는 HTTPS Reply Message에 HSTS Policy를 넣어서 보낸다.
  4. 서버로 부터 받은 응답을 통해 HSTS List를 구성한다.
    • HSTS는 HTTPS로 웹 사이트에 접속하기 위해 적어도 한번 웹 서버와 통신을 해야하는데, 통신 전에 미리 HTTPS로 접속하도록 목록을 미리 만들어 놓은 것.
    • 브라우저에서 지원하는 기능이며, 구글 크롬이 주도하는 HSTS Preload List가 주로 사용된다. (크롬 뿐만 아니라 엣지, 사파리, 파이어폭스 등 다양한 브라우저도 이를 지원)
    • 해당 리스트에 사이트가 등록되면 이후 업데이트되는 브라우저는 등록된 도메인을 무조건적으로 HTTPS로 연결하며, HTTPS가 지원되지 않는 경우 연결 자체가 불가하게 된다.


HSTS 적용방법

# 예시
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload




추가

웹이 받을 수 있는 공격

1. 적합하지 않은 방법으로의 데이터 변경 (무결성)


2. 넷 상의 도청, 스니핑 (기밀성)


3. DoS (user thread 죽이기, 서버에 request 집중되게 하기) - 사용성


4. 정상 사용자로 위장 (데이터 조작) - 인증



인증기관 CA를 통한 인증을 하는 이유


중간자 공격(Man in the middle attack)


예상 질문

HTTP / HTTPS

HTTP와 HTTPS에 대해서 설명해주세요

HTTP는 웹 상에서 클라이언트와 서버 간에 요청/응답으로 정보를 주고 받을 수 있는 프로토콜이다. 가장 큰 특징은 Connectionless와 Stateless 이다. 그런데, HTTP는 평문 통신이기 때문에 도청이 가능하고 통신 상대를 확인하지 않기 때문에 위장이 가능하다. 또한, 완전성을 증명할 수 없기 때문에 변조가 가능하다. 그래서 이것을 개선하기 위해 HTTPS 가 등장하게 되었다. HTTPS 는 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전의 프로토콜이다. 웹 상에서 정보를 암호화하는 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다. SSL 을 사용하여 암호화와 증명서, 안전성 보호를 이용할 수 있게 된다.


구글 크롬 브라우저에서는 HTTPS 사이트는 ‘안전함’으로 표시하고 HTTP 사이트에 대해서는 ‘안전하지 않음’ 경고 표시를 적용하고 있는데요, 구글은 왜 경고를 표시할까요?

HTTP 서버는 정보를 암호화하지 않은 텍스트로 주고 받기 때문에 해커의 공격과 스니핑에 매우 취약합니다. 이런 보안 문제를 해결하기 위해 서버와 클라이언트의 모든 통신 내용을 암호화하는 HTTPS를 사용해야 합니다.


그렇다면 왜 아직도 HTTP를 사용하는 웹사이트가 있을까요? (HTTPS의 단점)



SSL/TLS

SSL은 왜 대칭키와 공개키 암호화 방식을 혼합해서 사용할까요?

대칭키는 암복호화가 빠르지만 대칭키를 공유할 때 해킹의 위험이 있다는 단점이 있고, 공개키는 암호화와 복호화 키를 분리함으로써 공유의 문제가 없지만 암복호화에 비용이 더 든다는 단점이 있습니다.

이 둘을 혼합해서 사용함으로써 서로의 단점을 보완할 수 있습니다.


일반적으로 인증된 기관(CA)에는 어떤 곳이 있고, 사용자와 기업은 해당 기관을 어떻게 신뢰할 수 있나요?


브라우저 상단 표시줄에 자물쇠 아이콘이 표시되는 경우가 있는데, 이것이 무엇을 의미하는지 알고 있나요?

-> SSL 인증서를 의미하는데, SSL 인증서는 무엇인가요?


우리가 흔히 사용하는 공인 인증서의 경우 인증서 안에 어떤 내용이 들어갈까요?

공인 인증서는 A라는 사람이 진짜 A임을 보증해주는 문서입니다.

인증서에는 인증된 기관 CA의 이름(VeriSign)과 개인의 정보와 그리고 개인의 공개키가 들어가 있고, CA에서는 개인의 개인키도 함께 생성해서 전달합니다.


공인 인증서를 사용한다고 할 때 어떤 과정을 거쳐 인증이 될까요?

  1. A 사용자는 우선 접속할 은행의 인증서를 먼저 획득
  2. A의 인증서와 A의 개인키로 암호화된 데이터를 은행의 공개키로 암호화해서 은행에 전송
  3. 은행은 개인키로 복호화한 후, A의 개인키로 암호화된 정보가 A의 인증서 내 공개키로 복호화 된다면 A의 인증서가 맞다는 것을 확인할 수 있다.


공인 인증서에는 CA 기업의 이름, 개인의 공개키가 들어간다고 했는데, 왜 공인 인증서가 유출되면 문제라고 말할까요? 공개키는 유출되어도 상관없는 정보가 아닌가요?

흔히 공인 인증서가 유출되었다는 말은 개인의 private key 가 유출되었다는 의미입니다.

우리나라에서는 보통 인증서와 private key를 같이 저장해두기 때문입니다.


TLS는 어떤 보안 서비스를 제공하고 있고, 각 서비스는 어떻게 보장되고 있나요?

  1. 기밀성 : 대칭키 암호화 방식을 사용하게 되면 기밀성을 제공할 수 있습니다.
  2. 무결성 : 메시지 인증 코드(MAC)를 통해 메시지 위/변조 여부 확인 가능
  3. 인증 : 연결 초기 설정에서 주고 받는 인증서를 통해 신뢰할 수 있는 서버인지 인증가능


TLS에서 인증 서비스와 CA를 통한 인증 서비스는 어떤 차이가 있나요?


TLS는 기밀성, 무결성, 인증 3가지 보안 서비스를 제공하는데 여기서 무결성은 왜 필요한 보안 서비스인가요?



References