✏️ 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를 통해 공격자가 서버인 척하며 사용자 정보를 가로채는 네트워크 상의 인터셉터를 방지할 수 있습니다.
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️⃣ 공통의 암호 키 생성
이제 두 참가자는 같은 값을 갖게 되었고, 이 값을 공통의 암호 키로 사용할 수 있습니다. 이 키는 안전하게 교환되었으며, 중간에 공격자가 이를 도청하더라도 비밀 값을 알아내는 것은 매우 어렵습니다.

🔐 해싱 알고리즘
해싱 알고리즘은 데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 알고리즘입니다. 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로 가서 서버스에 대한 리포팅을 주기적으로 받으며 관리해야 합니다.
🌐 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 |
댓글