ComputerScience/HTTP

HTTPS

dev_swan 2023. 11. 16.

✏️ HTTPS

HTTP/2는 HTTPS 위에서 동작합니다. HTTPS는 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말합니다.

 

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로 많이 부릅니다.

 

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

SSL/TLS 보안 - https://velog.io/@oneul1213

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

 

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

더보기

💡 보안 세션

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

 

💡 세션

세션은 사용자와 시스템 간의 일정한 상호 작용 기간을 의미합니다. 사용자가 시스템에 로그인하여 로그아웃할 때까지의 시간, 혹은 특정 애플리케이션 또는 웹 서비스에 접속하여 연결이 끊어질 때까지의 시간을 세션으로 볼 수 있습니다.

 

세션 동안 사용자는 시스템의 자원이나 응용 프로그램을 사용할 수 있으며, 세션은 사용자의 상태 정보를 유지하게 해줍니다.

 

🤔 SSL/TLS의 핸드쉐이크 과정

1. 클라이언트 헬로 (Client Hello)

클라이언트는 자신이 지원하는 사이퍼 슈트(Cypher suites) 리스트를 서버에 전달합니다. 사이퍼 슈트는 데이터 암호화, 키 교환, 인증서 검증 등을 위한 알고리즘의 조합을 의미합니다.

 

2. 서버 헬로 (Server Hello)

서버는 클라이언트가 제시한 사이퍼 슈트 리스트 중에서 선택하게 되며, 그 중 서버와 클라이언트 모두에게 가장 적합한 것을 선택합니다.

 

3. 서버 인증서 전송

서버는 클라이언트에게 인증서를 전송하여 자신의 정체성을 증명합니다. 인증서에는 서버의 공개 키, 발행자 정보, 서명 등이 포함됩니다.

 

4. 키 교환 및 세션 키 생성

클라이언트와 서버는 안전하게 키를 교환하고, 이 키를 사용하여 세션동안 사용할 암호화된 연결을 위한 공유 세션 키를 생성합니다.

 

5. 암호화된 데이터의 송수신

클라이언트와 서버는 생성된 세션 키를 사용하여 암호화된 데이터를 송수신합니다.


 사이퍼 슈트

사이퍼 슈트(Cypher suites)는 프로토콜, 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이 결합된 알고리즘을 뜻합니다.


🔒 암호화 알고리즘

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

더보기

💡 디피-헬먼 키 교환 알고리즘

디피-헬먼 키 교환(Diffie-Hellman key exchange) 암호화 알고리즘은 암호키를 교환하는 하나의 방법입니다. 그 과정은 다음과 같습니다.

 

1️⃣ 공개값 공유

두 참가자는 모두 알고 있는 대수적으로 큰 숫자 **g(기저)**와 **p(소수)**를 공유합니다. 이러한 값은 공용 채널을 통해 안전하게 교환될 수 있으며, 비밀 정보로 간주하지 않습니다.

 

2️⃣ 각자의 비밀값과 혼합

각 참가자는 임의의 비밀값을 선택합니다. 이 값은 개인 키 또는 비밀값이라고 부르며, 다른 사람에게 알려지면 안됩니다. 각 참가자는 이 비밀값과 공유된 기저 g를 사용하여 특정 계산을 수행합니다.

 

3️⃣ 혼합값 공유

각 참가자는 이전 단계에서 계산한 결과를 상대방에게 전송합니다. 이 값을 혼합값 또는 공개키라고 합니다. 이 값은 공개적으로 전송될 수 있으나, 원래의 비밀값을 이를 통해 직접 알아내는 것은 매우 어렵습니다.

 

4️⃣ 각자의 비밀값과 혼합

각 참가자는 상대방으로부터 받은 혼합값과 자신의 비밀값을 결합하여 새로운 계산을 수행합니다. 이 계산의 결과는 두 참가자 모두에게 동일하게 나옵니다.

 

5️⃣ 공통의 암호 키 생성

이제 두 참가자는 같은 값을 갖게 되었고, 이 값을 공통의 암호 키로 사용할 수 있습니다. 이 키는 안전하게 교환되었으며, 중간에 공격자가 이를 도청하더라도 비밀 값을 알아내는 것은 매우 어렵습니다.

디피-헬먼 키 교환 알고리즘 - https://www.pentasecurity.co.kr

🔐 해싱 알고리즘

해싱 알고리즘은 데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 알고리즘입니다. SSL/TLS는 해싱 알고리즘으로 SHA-256 알고리즘과 SHA-384 알고리즘을 사용합니다.

더보기

💡 SHA-256 알고리즘

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

 

💡 해시

다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한 값입니다.

 

💡 해싱

임의의 데이터를 해시로 바꿔주는 일이며 해시 함수가 이를 담당합니다.

 

💡 해시 함수

임의의 데이터를 입력으로 받아 일정한 길이의 데이터로 바꿔주는 함수입니다.


🤔 SEO에 도움되는 HTTPS

SEO(Search Engine Optimization)는 검색엔진 최적화를 뜻하며 사용자들이 구글, 네이버 같은 검색엔진으로 웹 사이트를 검색했을 때 그 결과를 페이지 상단에 노출시켜 많은 사람이 볼 수 있도록 최적화하는 방법을 의미합니다. 이를 위한 방법으로 캐노니컬 설정, 메타 설정, 페이지 속도 개선, 사이트맵 관리 등이 있습니다.

 

캐노니컬 설정

캐노니컬 태그는 웹 페이지가 동일한 내용의 다른 버전을 포함하고 있을 때, 검색 엔진들에게 어떤 페이지가 기본 또는 우선순위 버전임을 알려주는 HTML 요소입니다. 이 태그는 웹사이트에서 중복 내용이 발생할 가능성이 있는 경우 유용하게 사용됩니다.

<link rel="canonical" href="https://example.com/main-url/" />

 

메타 설정

메타 태그는 웹 페이지의 <head> 영역에 위치하며, 페이지의 기본 정보나 동작을 정의합니다. 이 태그는 일반적으로 웹 브라우저에 직접적으로 표시되지 않지만, 검색 엔진 크롤러에게 페이지의 내용과 성격을 알려줍니다.

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <!-- SEO 관련 메타 태그 -->
    <title>SEO 최적화를 위한 메타 태그 예시</title>
    <meta name="description" content="SEO 최적화를 위한 메타 태그 사용 방법을 소개하는 예시 페이지입니다. 여기서는 메타 태그의 중요성과 사용 방법을 자세히 알려드립니다.">
    <meta name="keywords" content="SEO, 메타 태그, 최적화, 예시, 웹 페이지">
    <link rel="canonical" href="https://www.example.com/meta-tag-example">

    <!-- Open Graph(OG) 태그: 소셜 미디어에서 페이지를 잘 표시하기 위한 태그 -->
    <meta property="og:title" content="SEO 최적화를 위한 메타 태그 예시">
    <meta property="og:description" content="메타 태그의 중요성과 사용 방법을 자세히 알려드립니다.">
    <meta property="og:image" content="https://www.example.com/images/seo-image.jpg">
    <meta property="og:url" content="https://www.example.com/meta-tag-example">

    <!-- 기타 태그, 스크립트, 스타일 등 -->
</head>

 

페이지 속도 개선

사이트의 속도는 빨라야 합니다. 구글의 PageSpeedInsights로 가서 서버스에 대한 리포팅을 주기적으로 받으며 관리해야 합니다.

구글 PageSpeedInsights - Gogle


🌐 HTTPS를 구축하는 방법

HTTPS 구축 방법은 크게 세 가지입니다. 직접 CA(Certificate Authorities)에서 구매한 인증키를 기반으로 HTTPS 서비스를 구축하거나, 서버 앞단의 HTTPS를 제공하는 로드밸런서를 두거나, 서버 앞단에 HTTPS를 제공하는 CDN(Content Delivery Network)을 둬서 구축합니다.

'ComputerScience > HTTP' 카테고리의 다른 글

HTTP/3.0  (0) 2023.11.16
HTTP/2  (0) 2023.11.16
HTTP/1.0, HTTP/1.1  (0) 2023.11.16

댓글