[cs 스터디] 2-5. HTTP - HTTPS

YooJeeun·2025년 1월 3일

cs 스터디

목록 보기
25/65

HTTPS

HTTP/2는 HTTPS 위에서 동작한다. HTTP + TLS

애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말한다. 이를 통해 '통신을 암호화'한다.

-> 암호화는 승인된 당사자만 정보를 이해할 수 있도록 데이터를 스크램블한 방법이다. 이를 복호화하려면 송신자와 수신자가 서로 동의한 키가 필요하다. 또한 이를 만들기 위해 키가 쓰이기도 한다.

스크램블: 각 단어나 문자를 패턴에 따라 암호화하는 것이 아니라 무작위 방식으로 개별 데이터 비트를 섞는 것을 말한다.

  • 대칭암호화: 대칭암호화는 키를 하나만 사용하는 암호화 방법이다. (DES, AES)

  • 비대칭암호화: 공개키 암호화라고도 함. 두개의 다른 키(공개키, 개인키)로 데이터를 암호화하거나 서명하고 키 중 하나인 공개 키를 누구나 사용할 수 있도록 하는 방법이다. 공개키로 암호화된 데이터는 개인키로만 복호화할 수 있게 한다. (RSA, DH(Diffie-Hellman)

    HTTPS를 가능하게 하는 프로토콜인 TLS는 부분적으로 비대칭 암호화를 사용한다.
    비대칭 암호화로 인증한 후 대칭 암호화로 보안적 통신을 시작한다.
    TLS 핸드셰이크 과정에서 처음 인증할 때 비대칭 암호화를 하고 그 이후 클라이언트와 서버는 "세션키"라고 하는 대칭 암호화된 키를 기반으로 통신을 한다.

SSL/TLS

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 버전인 TLS 1.3을 기반으로 설명한다.

SSL/TLS은 전송 계층에서 보안을 제공하는 프로토콜이다. 클라이언트와 서버가 통신할 때 SSL/TLS를 통해 제3자가 메시지를 도청하거나 변조하지 못하도록 한다.

SSL/TLS를 통해 공격자가 서버인 척하며 사용자 정보를 가로채는 네트워크상의 ‘인터셉터’를 방지할 수 있다.

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

보안 세션

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

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

TLS의 핸드셰이크

클라이언트와 서버와 키를 공유하고 이를 기반으로 인증, 인증 확인 등의 작업이 일어나는 단 한 번의 1-RTT가 생긴 후 데이터를 송수신하는 것을 볼 수 있다.

클라이언트에서 사이퍼 슈트(cypher suites)를 서버에 전달하면 서버는 받은 사이퍼 슈트의 암호화 알고리즘 리스트를 제공할 수 있는지 확인.
제공할 수 있다 -> 서버에서 클라이언트로 인증서를 보내는 인증 메커니즘이 시작.
이후 해싱 알고리즘 등으로 암호화된 데이터의 송수신이 시작된다.

TLS1.3버전에서는 RSA같은 경우 취약점이 있기 때문에 공식적으로 지원하지 않는다. DH의 경우 타원곡선 DH를 사용한다.

사이퍼 슈트
프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약
다섯개가 있다.

• 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

TLS_AES_128_GCM_SHA256에는 세 가지 규약이 들어 있는데 TLS는 프로토콜, AES_128_GCM은 AEAD 사이퍼 모드, SHA256은 해싱 알고리즘을 뜻한다.

AEAD 사이퍼 모드
AEAD(Authenticated Encryption with Associated Data)는 데이터 암호화 알고리즘이며 AES_128_GCM 등이 있다. 예를 들어 AES_128_GCM이라는 것은 128비트의 키를 사용하는 표준 블록 암호화 기술과 병렬 계산에 용이한 암호화 알고리즘 GCM이 결합된 알고리즘을 뜻한다.

인증 메커니즘
인증 메커니즘은 CA(Certificate Authorities)에서 발급한 인증서를 기반으로 이루어진다.
CA에서 발급한 인증서는 안전한 연결을 시작하는 데 있어 필요한 ‘공개키’를 클라이언트에 제공, 사용자가 접속한 ‘서버가 신뢰’할 수 있는 서버임을 보장한다.
인증서는 서비스 정보, 공개키, 지문, 디지털 서명 등으로 이루어져 있다.

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

CA 발급 과정
자신의 사이트 정보와 공개키를 CA에 제출
이후 CA는 공개키를 해시한 값인 지문(finger print)을 사용하는 CA의 비밀키 등을 기반으로 CA 인증서를 발급한다.

암호화 알고리즘
키 교환 암호화 알고리즘으로 대수곡선 기반의 ECDHE(Elliptic Curve Diffie-Hellman Ephermeral) 또는 모듈식 기반의 DHE(Diffie-Hellman Ephermeral)를 사용한다.
둘 다 디피-헬만(Diffie-Hellman) 방식을 근간으로 만들어졌다.

디피-헬만 키 교환 암호화 알고리즘: 암호키를 교환하는 하나의 방법이다. g와 x와 p를 안다면 y는 구하기 쉽지만 g와 y와 p만 안다면 x를 구하기는 어렵다는 원리에 기반한 알고리즘이다.

처음에 공개 값을 공유하고 각자의 비밀 값과 혼합한 후 혼합 값을 공유한다. 그다음 각자의 비밀 값과 또 혼합한다.
그 이후에 공통의 암호키가 생성되는 것이다.

클라이언트와 서버 모두 개인키와 공개키를 생성하고 서로에게 공개키를 보내고 공개키와 개인키를 결합하여 PSK(사전 합의된 비밀키)가 생성된다면, 악의적인 공격자가 개인키 또는 공개키를 가지고도 PSK가 없기 때문에 아무것도 할 수 없게 된다.

해싱 알고리즘
데이터를 추정하기 힘든 더 작고 섞여있는 조각으로 만드는 알고리즘이다.
SSL/TLS는 SHA-256, SHA-384 알고리즘을 쓰며 그중 SHA-256 알고리즘을 많이 쓴다.

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

해시: 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 값

해싱: 임의의 데이터를 해시로 바꿔주는 일이며 해시 함수가 이를 담당

해시 함수: 임의의 데이터를 입력으로 받아 일정한 길이의 데이터로 바꿔주는 함수

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

Q. 해싱 알고리즘은 TLS에서 어떻게 쓰이나?
-> 인증서가 올바른 인증서인지 확인할 때 전자서명을 이용하는데 이때 해싱알고리즘이 사용된다.
1. 인증 생성 작업: 전자 서명을 만드는데 서명되는 메시지를 해싱한다.
2. 인증 확인 작업: 메시지를 복호화해서 해시를 서로 비교해 올바른 메시지인지 확인한다.

인증서 - 인증서는 1. 주체(인증서 발급한 CA, 도메인, 웹사이트 소유자, 인증서 소유자), 2. 공개키(공개키, 공개키암호화방법)을 포함하는 단순한 데이터 파일.
자신의 우베사이트 안에서 SSL인증서를 만들수도 있지만 보통은 인증기관인 CA에서 발급한 SSL인증서를 기반으로 인증작업을 수행한다.
주체는 클라이언트가 접속한 서버가 의도한 서버가 맞는지 확인할 때 쓰이고 공개키는 처음 인증작업을 수행할 때 쓰인다.

CA - 인증서의 역할은 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지를 보장하는 역할을 한다. 이 인증서를 발급하는 기업들을 CA(Certificate Authority)라고 한다.

RSA의 취약점
: RSA의 경우 클라이언트가 생성한 임시 암호값을 서버로 전송하지만 DH의 경우 클라이언트와 서버가 서로 교환한 DH 매개변수를 사용해 개인키를 만든다. 이 때문에 RSA는 클라이언트에서 생성한 임시 암호값이 탈취당한 경우 해킹의 위험이 있다. DH는 탈취당해도 공통의 암호키를 못만들기 때문에 더 좋다.

SEO에도 도움이 되는 HTTPS

SEO(Search Engine Optimization):
검색엔진 최적화를 뜻하며 사용자들이 구글, 네이버 같은 검색엔진으로 웹 사이트를 검색했을 때 그 결과를 페이지 상단에 노출시켜 많은 사람이 볼 수 있도록 최적화하는 방법을 의미한다.

이를 위한 방법으로

  • 캐노니컬 설정
  • 메타 설정
  • 페이지 속도 개선
  • 사이트맵 관리
    등이 있다.

캐노니컬 설정

<link rel="canonical" href="https://example.com/page2.php" />

사이트 link에 캐노티컬 설정을 해야한다.

메타 설정
html 파일의 가장 윗부분인 메타를 잘 설정해야 한다.

페이지 속도 개선
구글의 PageSpeedInsights로 가서 자신의 서비스에 대한 리포팅을 주기적으로 받으며 관리해야 한다.

사이트맵 관리
사이트맵 제너레이터를 사용하거나 직접 코드를 만들어 구축해도 된다. 사이트맵은 다음과 같은 형식의 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 구축 방법

  • 직접 CA에서 구매한 인증키를기반으로 HTTPS 서비스를 구축
  • 서버 앞단의 HTTPS를 제공하는 로드밸런서 두기
  • 서버 앞단에 HTTPS를 제공하는 CDN 두기
profile
제니벨로그

0개의 댓글