본문 바로가기

CS

[네트워크]HTTP와 HTTPS 차이

HTTP란?


  • HTTP는 하이퍼 텍스트 전송 프로토콜의(Hypertext Transfer Protocol)의 약자
  • 서로 다른 시스템들 사이에서 통신을 주고받게 해주는 프로토콜(규약)

HTTPS란?


  • Hypertext Transfer Protocol Secure, 보안기술이 적용된 HTTP
  • HTTP(응용계층)와 TCP(전송계층) 사이에서 일종의 보안 계층을 구현
  • SSL 트래픽은 바이너리 프로토콜로 HTTP와는 완전히 달라 다른포트(보통 443포트)를 통해 전달됨

왜 HTTPS가 필요하게 되었을까?


  • HTTP는 도청, 위장, 변조 가능(평문 통신, 통신 상대를 확인 안함, 정보의 정확성 증명 불가)
  • SSL(Secure Socket Layer), TLS(Transport Layer Security)라는 다른 프로토콜을 조합함으로써 암호화, 보안 강화

TLS

  • 응용 계층 데이터 암호화, 암호화된 전송 계층의 데이터 복호화, TCP 443번 포트 사용
  • 암호화, 인증(발신자의 신원 확인), 무결성(checksum 활용, 위변조 확인)
  • HTTPS의 기반 기술
  • SSL 3.0을 기초로 해서 IETF가 만든 프로토콜
  • SSL 중 현재 사용가능한 버전은 없고 TLS 초기 버전도 지원 중단될 예정

SSL

  • SSL은 TLS의 이전의 프로토콜
  • 보안 소켓 계층 이라는 뜻으로 인터넷을 통해 전달되는 정보 보안의 안전한 거래를 허용하기 위해 Netscape 사에서 개발한 인터넷 통신 규약 프로토콜

HTTPS 작동 원리는?


  • SSL은 증명서를 활용하여 상대를 확인함
  • 이때 증명서는 신뢰할 수 있는 제 3 자 기관(CA)에 의해 발행(브라우저가 신뢰할 수 있는 기관 리스트를 저장하고 있음)
  • 공통키를 공개키 암호화 방식으로 교환한 다음에 다음부터의 통신은 공통키 암호를 사용

공개키 암호화 방식

<참고> 대칭키 암호화 방식
암호화와 복호화에 같은 키를 사용하는 방식, 키를 전달하는 과정에서 유출되면 암호화된 데이터가 제 3자에 의해 복호화될 가능선 존재

  • 암호화와 복호화에 서로 다른 키를 사용함
  • 1번 키로 암호화하면 반드시 2번키로만 복호화할 수 있고 2번 키로 암호화하면 반드시 1번키로만 복호화할 수 있음
  • 그 중에서 하나 키는 모두에게 공개하는(Public) 공개키(1번 키)로 만들어서 공개키 저장소에 등록
  • 서버는 서버만 알 수 있는 개인키(2번 키), Secret key를 소유
  • 1번키로 암호화된 http 요청이 온다면 서버는 개인키(2번 키)를 이용하여 1번키로 암호화된 문장을 디코딩
  • 서버는 요청에 맞는 응답을 다시 개인키(2번 키)로 암호화해서 클라이언트로 보냄
  • 클라이언트는 공개키(1번 키)를 이용해서 개인키(2번 키) 암호화된 HTTPS 응답을 복호화한다.
  • 이때 공개키로 복호화되었다는 것으로 데이터 제공자의 신원을 보장할 수 있다.(개인키 소유자)

디지털 서명의 구조

  • 서명자는 전자 문서의 해시 값을 계산하고 비밀키로 암호화함(1번)
  • 서명자의 공개키(2번)
  • 서명 대상 전자 문서(3번)
  • 1, 2, 3번을 받은 검증자는 전자문서의 해시 값을 계산한 후 서명자의 비밀키로 암호화 된 해시 값을 공개키로 복화하 한 후 비교한다.

자세한 HTTPS 동작 과정


1. Client측 랜덤 데이터 전송

  • 클라이언트에서 랜덤 데이터를 생성
  • 클라이언트에서 사용할수 있는 암호화 방식들을 서버에 전달(암호화 방식에 대한 합의가 필요)

2. Server측 응답

  • 랜덤 데이터를 생성하여 클라이언트에 응답
  • 암호화 방식 채택
  • 서버가 발급받은 인증서를 클라이언트로 전달

3. Client 인증 단계

  • 클라이언트에 저장된(브라우저에 저장된) CA 리스트를 확인
  • CA의 공개키를 이용해서 인증서를 복호화, 복호화에 성공했다면 인증서는 CA의 개인키로 암호화된 문서임을 보장
  • 1, 2 과정에서 주고 받은 랜덤데이터를 활용해서 pre master secret 키를 생성(추후 대칭키 방식으로 사용), 공개키 사용 암호화 후 전송(공개키는 2과정에서 받은 인증서에 저장)

4. Server 인증 단계

  • 서버는 클라이언트가 전송한 pre master secret 값을 자신의 비공개키로 복호화
  • 서버와 클라이언트는 모두 일련의 과정을 거쳐서 pre master secret 값을 master secret 값으로 만듦
  • master secret로 session key를 새성, 이후 대칭키 방식으로 데이터를 주고 받음

5. 데이터 전송

  • 이후 세션키로 데이터를 암호화 하여 통신
  • 속도는 느리지만 데이터를 안전하게 주고 받을 수 있는 공개키 방식으로 대칭키를 암호화하고, 실제 데이터를 주고 받을 때는 대칭키를 이용해서 데이터 통신

6. 세션 종료

  • 데이터 송,수신이 끝나면 SSL 통신이 끝났음으로 서로에게 알림
  • 이 때 통신에서 사용한 세션 key(대칭키) 폐기

단점

  • 공개키 암호화 방식은 전송 속도가 느림

SSL 인증서(TLS를 사용하는 서버에 적용될 인증서)

  • 전자 인증서: 신분 사칭을 막기 위한 방법, 전자 서명 : 데이터가 위변조되어 있지 않다는 것을 증명
  • 공개 키를 보내는 사람이 믿을만한지 인증기관을 통한 전자인증서로 증명
  • 전자 인증서 안에는 공개 키와 인증 기관의 전자 서명이 포함, 전자 서명은 인증기관이 공개키가 소유자의 것임을 보증하는 역할
  • 전자 서명은 원본 데이터의 해시값을 구한 후 공개키가 아닌 개인키로 암호화하면 됨(공개키로 복화화 해서 메시지 다이제스트가 일치하는지 확인
  • 송신자가 원본 데이터와 전자 서명을 세트로 전송하고 수신자가 원본 데이터와 전자 서명을 비교한다.
  • 인증서의 내용은 CA의 비공개 키를 이용, 암호화 되어 웹브라우저에게 제공됨
  • 포함내용: 인증서 발급자, CA의 디지털 서명, 서버측 공개키 등

보안은 장점, 그렇다면 HTTPS 단점은?


  • 암호화 통신은 HTTP 대비 CPU 나 메모리 등 리소스 과다 소모
  • 따라서 서버 한 대당 처리할 수 있는 리퀘스트의 수가 줄어듦
  • 민감한 정보를 다룰 때만 암호화 통신을 사용

참고, 생활코딩 HTTPS와 SSL 인증서
SSL 통신과정 도식화

'CS' 카테고리의 다른 글

[네트워크]GET과 POST의 차이  (0) 2021.03.20
[네트워크] 네트워크 기본 5계층, OSI 7계층  (0) 2021.03.20
[CS] 프레임워크와 라이브러리, API 차이  (0) 2021.03.16
[CS]MVC패턴이란?  (0) 2021.03.16
[CS]아키텍처란?  (0) 2021.03.15