[Network] HTTP & Evolution 2 - HTTPS

뚜비·2023년 5월 9일
0

Network

목록 보기
6/6

HTTPS(Hypertext Transfer Protocol Secure)

  • HTTP의 확장 버전 또는 더 안전한 버전, 즉 신뢰할 수 있는 HTTP 요청
  • 전송중의 메시지를 전송 계층 보안 (TLS, Transport Layer Security) 프로토콜을 사용해 암호화하는 HTTP의 보안 버전

🤔 SSL/TLS??
애플리케이션 계층과 전송 계층 사이에 신뢰 계층

  • HTTPS에서는 브라우저와 서버가 데이터를 전송하기 전에 안전하고 암호화된 연결을 설정
  • HTTP/2는 HTTPS 위에서 동작

🤔 HTTPS는 왜 필요할까?
HTTP는 원래 일반 텍스트 프로토콜! HTTP 메시지는 인터넷을 통해 암호화되지 않은 상태로 전송
→ 메시지가 목적지로 라우팅될 때 메시지를 보는 모든 참여자가 읽을 수 있음.
→ 보안상 문제


SSL/TLS

  • 전송 계층에서 보안을 제공하는 프로토콜
  • 서버, 애플리케이션, 사용자 및 시스템 간의 데이터를 암호화하는 통신 프로토콜
    → 클라이언트와 서버가 통신할 때 SSL/TLS를 통해 제3자가 메시지를 도청하거나 변조하지 못하도록
    → 네트워크를 통해 연결된 두 당사자를 인증하므로 데이터를 안전하게 교환할 수 있음

🤔 참고

  • SSL(Secure Socket Layer)은 SSL 1.0, SSL 2.0, SSL 3.0, TLS(Transport Layer Security Protocol) 1.0, TLS 1.3까지 버전이 올라가며 마지막으로 TLS로 명칭이 변경되었으나, 보통 이를 합쳐 SSL/TLS로 많이 부른다.
  • TLS는 SSL의 후속이라고 생각하면 된다.
    여기서는 최신 TLS 버전인 TLS 1.3을 기반으로 설명!!

  • 네트워크 상의 Interceptor 방지 가능

    🤔 Interceptor(인터셉터)??
    공격자가 서버인 척하며 사용자 정보를 가로채는 것

  • 보안 세션을 기반으로 데이터를 암호화하며 보안 세션이 만들어질 때 인증 메커니즘, 키 교환 암호화 알고리즘, 해싱 알고리즘이 사용됩


HTTPS에서 SSL/TLS 사용

  • 웹 사이트에 연결하기 전 브라우저(클라이언트)는 TLS를 사용하여 웹 사이트(웹 서버)의 TLS 또는 SSL 인증서를 확인
  • TLS 및 SSL 인증서는 서버가 현재 보안 표준을 준수하고 있음을 보여줌
  • 브라우저의 주소 표시줄에서 인증서에 대한 증거를 찾을 수 있음
    → 인증되고 암호화된 연결은 http:// 대신 https:// 를 표시

보안 세션

  • 보안이 시작되고 끝나는 동안 유지되는 세션
  • SSL/TLS는 핸드셰이크를 통해 보안 세션을 생성하고 이를 기반으로 상태 정보 등을 공유

🤔 용어 정리

  • Session(세션)
    운영체제가 어떠한 사용자로부터 자신의 자산 이용을 허락하는 일정한 기간
    즉, 사용자는 일정 시간 동안 응용 프로그램, 자원 등을 사용할 수 있다.

TLS 1.3 핸드셰이크

1단계. 클라이언트가 서버에 인사 메세지(Hello) + 사이퍼슈트(cypher suites) + 키 공유(대부분 Key Agreement Protocol, 디피 헬만 키 교환 알고리즘 방식이면 공개키)를 보냄
2단계. 서버가 클라이언트에 인사 메세지(Hello) + 키 공유 + 인증 + 인증 확인 + Server finished (→ 단 한번의 1-RTT)

서버는 받은 사이퍼 슈트의 암호화 알고리즘 리스트를 제공할 수 있는지 확인
제공할 수 있다면 서버에서 클라이언트로 인증서를 보내는 인증 메커니즘이 시작

3단계. 데이터를 암호화하여 송수신 (해싱 알고리즘 등)


사이퍼 슈트

  • 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약
  • 5개 존재

    • TLS_AES_128_GCM_SHA256
    • TLS_AES_256_GCM_SHA384
    • TLS_CHACHA20_POLY1305_SHA256
    • TLS_AES_128_CCM_SHA256
    • TLS_AES_128_CCM_8_SHA256




AEAD(Authenticated Encryption with Associated Data) 사이퍼 모드

  • 데이터 암호화 알고리즘을 의미 EX) AES_128_GCM 등
  • AES128_GCM : 128비트의 키를 사용하는 표준 블록 암호화 기술과 병렬 계산에 용이한 암호화 알고리즘 GCM_이 결합된 알고리즘

인증 메커니즘

  • 인증 메커니즘은 CA(Certificate Authorities, 인증기관)에서 발급한 인증서를 기반으로 이루어짐
  • CA에서 발급한 인증서‘공개키’를 클라이언트에 제공하고 사용자가 접속한 ‘서버가 신뢰’할 수 있는 서버임을 보장

    개인이 온라인 금융거래할 때 공인인증서(CA가 발행함)를 통해 신원 확인하는 것처럼!

  • 인증서는 서비스 정보, 공개키, 지문, 디지털 서명 등으로 이루어져 있음

🤔 CA는 인증기관.. 아무 기관에서 인증해도 되는 건가?

  • CA는 아무 기업이나 할 수 있는 것이 아니고 신뢰성이 엄격하게 공인된 기업들만 참여할 수 있음
  • 대표적인 기업 : Comodo, GoDaddy, GlobalSign, 아마존 등등

CA 인증서 발급 과정

  1. 자신의 서비스가 CA 인증서를 발급받으려면 자신의 사이트 정보공개키를 CA에 제출해야 함
  2. 이후 CA는 CA의 비밀키(공개키를 해시한 값인 지문(finger print)을 사용) 등을 기반으로 CA 인증서를 발급

🤔 용어 정리

  • 개인키(Private Key)
    비밀키라고도 하며, 개인이 소유하고 있는 키이자 반드시 자신만이 소유해야 하는 키
  • 공개키(Public Key)
    공개되어 있는 키, 제 3자가 가지고 있어도 상관없음!

디피-헬만 키 교환 암호화 알고리즘(Diffie-Hellman key exchange)

🤔 디피-헬만(Diffie-Hellman) 방식을 근간으로 만들어진 암호화 알고리즘
• 대수곡선 기반의 ECDHE(Elliptic Curve Diffie-Hellman Ephermeral)
• 모듈식 기반의 DHE(Diffie-Hellman Ephermeral)

  • 보안성이 없는 매체를 통해 비밀키(PSK)를 교환 할 수 있게 함!
  • 클라이언트와 서버 모두 개인키와 공개키를 생성하고 서로에게 공개키를 보내고 공개키와 개인키를 결합하여 PSK(사전 합의된 비밀키)가 생성된다면, 악의적인 공격자가 개인키 또는 공개키를 가지고도 PSK가 없기 때문에 아무것도 할 수 없게 된다.
    → 키를 암호화할 수 있음!

  1. 앨리스와 밥이 서로의 비밀키를 공유하려고 한다.
  2. 앨리스와 밥은 각각 개인키(Private key)를 생성한다. (Alice의 개인키는 Xa, Bob의 개인키는 Xb)
  3. 앨리스와 밥은 자신들의 개인키로부터 공개키(Public Key)를 생성한다. (Alice의 공개키는 Ya, Bob의 공개키는 Yb)
    이때 개인키로부터 공개키를 수하는데 사용되는 수학적 공식은 다음과 같다.

🤔공개키를 알면 개인키를 구할 수 있는 거 아니야?

  • 개인키로 부터 공개키를 계산하는 것은 쉽지만 공개키로부터 개인키를 계산하는 것은 굉장히 어려움
  • 이산로그의 성질을 사용! (Ex. y = log x에서 x값만 알면 y는 구하기 쉬움. 그러나 y를 통해 x를 구하기 어려움)
  • 앞의 식에서 g와 x와 p를 안다면 y는 구하기 쉽지만 g와 y와 p만 안다면 x를 구하기는 어렵다는 원리에 기반
  1. 앨리스와 밥은 각자의 공개키(Ya, Yb)를 상대방에게 전달
  2. 앨리스는 자신의 개인키(Xa) + 밥의 공개키(Yb)로 새로운 비밀키 Z를 생성, 밥은 자신의 개인키(Xb) + 앨리스의 공개키(Ya)로 새로운 비밀키 Z 생성
  3. Z는 앨리스와 밥이 모두 공통으로 얻을 수 있는 값으로 공유하고 있는 PSK(사전 합의된 비밀키)가 된다!

해싱 알고리즘

  • 긴 길이의 데이터를 짧은 길이의 데이터로 변환하는 알고리즘
  • 데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 알고리즘
  • SSL/TLS는 해싱 알고리즘으로 SHA-256 알고리즘과 SHA-384 알고리즘을 씀

SHA-256 알고리즘

  • 해시 함수의 결과값이 256비트인 알고리즘
  • 비트 코인을 비롯한 많은 블록체인 시스템에서도 사용
  • SHA-256 알고리즘은 해싱을 해야 할 메시지에 1을 추가하는 등 전처리를 하고 전처리된 메시지를 기반으로 해시를 반환합니다.

• SHA-256 사이트 링크: https://emn178.github.io/online-tools/sha256.html

🤔 용어 정리

  • 해시
    다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 값
  • 해싱
    임의의 데이터를 해시로 바꿔주는 일이며 해시 함수가 이를 담당
  • 해시 함수
    임의의 데이터를 입력으로 받아 일정한 길이의 데이터로 바꿔주는 함수

참고로 TLS 1.3은 사용자가 이전에 방문한 사이트로 다시 방문한다면 SSL/TLS에서 보안 세션을 만들 때 걸리는 통신을 하지 않아도 됩니다. 이를 0-RTT라고 합니다.



SEO(Search Engine Optimization)에도 도움이되는 HTTPS

  • 구글(Google)은 SSL 인증서를 강조해왔고 사이트 내 모든 요소가 동일하다면 HTTPS 서비스를 하는 사이트가 그렇지 않은 사이트보다 SEO 순위가 높을 것이라고 공식적으로 밝힘
  • SEO(Search Engine Optimization)
    : 검색엔진 최적화
    : 사용자들이 구글, 네이버 같은 검색엔진으로 웹 사이트를 검색했을 때 그 결과를 페이지 상단에 노출시켜 많은 사람이 볼 수 있도록 최적화하는 방법을 의미
    : 서비스를 운영한다면 SEO 관리는 필수
    → 이를 위한 방법으로 캐노니컬 설정, 메타 설정, 페이지 속도 개선, 사이트맵 관리 등

1. 캐노니컬 설정

  • 캐노니컬 태그 : 한 페이지를 가리키는 여러 개의 주소가 존재할 때 어떤 페이지가 대표 페이지인지 알려주는 역할을 함
  • 즉 검색엔진에게 대표 URL을 알려줌
<link rel="canonical" href="https://example.com/page2.php" />

앞처럼 사이트 link에 캐노니컬을 설정


2. 메타 설정

  • <meta> : 웹 페이지에 대한 정보를 제공하는 기능
  • html 파일의 윗부분에 존재
    EX) 애플의 사이트의 메타

3. 페이지 속도 개선

  • 사이트의 속도는 빨라야 함
  • 구글의 PageSpeedInsights로 가서 자신의 서비스에 대한 리포팅을 주기적으로 받으며 관리

• 페이지 인사이트 링크: https://developers.google.com/speed/pagespeed/insights/

벨로그를 테스트 해보자 야호~~
앞의 그림처럼 잘 나오는 것을 볼 수 있습니다.


4. 사이트맵 관리

  • 사이트맵(sitemap.xml)을 정기적으로 관리!!
  • 사이트맵 제너레이터를 사용하거나 직접 코드를 만들어 구축해도 됨
  • 사이트맵은 다음과 같은 형식의 xml 파일을 말함
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://kundol.co.kr/</loc>
<lastmod>수정날짜</lastmod>
<changefreq>daily</changefreq>
<priority>1.1</priority>
</url> 
</urlset>

HTTPS 구축 방법

  1. 직접 CA에서 구매한 인증키를 기반으로 HTTPS 서비스를 구축
  2. 서버 앞단의 HTTPS를 제공하는 로드밸런서를 둠
  3. 서버 앞단에 HTTPS를 제공하는 CDN을 둬서 구축


😎 참고자료

면접을 위한 CS 전공지식 노트
HTTP guide
How does HTTPS work? What's a CA? What's a self-signed Certificate?
웹 기술과 HTTP
HTTP와 HTTPS의 차이점은 무엇인가요?
키 교환 및 비대칭키 암호화
SEO 초보자를 위한 '캐노니컬 태그' 설명하기

profile
SW Engineer 꿈나무 / 자의식이 있는 컴퓨터

0개의 댓글