HTTP/2는 기본적으로 HTTPS 위에서 동작합니다. HTTPS란, 우리가 아는 HTTP가 SSL/TLS라는 보안 계층을 거치는 것을 말합니다. 이 보안 계층은 애플리케이션 계층과 전송 계층 사이에 끼어들어, 우리가 주고받는 모든 '통신을 암호화'합니다.
🛡️ SSL/TLS
인터넷 통신(전송 계층)을 위한 보안 규칙(프로토콜)입니다. 클라이언트와 서버가 데이터를 주고받을 때, 제3자가 메시지를 도청하거나 변조하지 못하도록 꽁꽁 잠가줍니다.
SSL/TLS 덕분에, 공격자가 서버인 '척'하며 중간에서 사용자 정보를 가로채는 '인터셉터' 공격을 막을 수 있습니다.
SSL/TLS는 '보안 세션'이라는 연결 통로를 기반으로 데이터를 암호화합니다. 이 보안 세션을 만들 때, '서로를 어떻게 믿을지(인증)', '어떤 자물쇠를 쓸지(키 교환 암호화)', '데이터가 변조되지 않았는지(해싱)'를 정하게 됩니다.
📌 보안 세션
암호화 통신이 시작되고 끝날 때까지 유지되는 연결 상태를 말합니다. SSL/TLS는 핸드셰이크(Handshake)라는 과정을 통해 이 보안 세션을 만듭니다. 이 핸드셰이크가 끝나면, 통신에 필요한 상태 정보(예: 비밀 키)를 서로 공유하게 됩니다.
처음 연결할 때 클라이언트와 서버가 키를 교환하고 서로를 확인하는 작업(인증)에 단 한 번의 왕복(1-RTT)이 발생합니다. 그 후부터 진짜 데이터를 주고받기 시작합니다.
먼저, 클라이언트가 "저는 이런 암호화 방식(사이퍼 슈트 리스트)들을 쓸 수 있어요"라고 서버에 전달합니다. 서버는 이 리스트를 보고, "좋아요, 그중에서 이 방식(서버가 지원하는 암호화 알고리즘)으로 하죠"라고 정합니다. 합의가 되면, 서버가 클라이언트에게 자신의 신분증(인증서)을 보내는 인증 메커니즘이 시작되고, 이후 모든 데이터는 합의된 방식(해싱 알고리즘 등)으로 암호화되어 오고 갑니다.
- 용어 설명:
- 세션:
운영체제가 어떠한 사용자로부터 자신의 자산 이용을 허락하는 일정한 기간. 즉, 사용자는 일정 시간 동안 응용 프로그램, 자원 등을 사용할 수 있음 - 사이퍼 슈트:
프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약을 말하며, 다섯 개가 있습니다. 예를 들어 TLS_AES_128_GCM_SHA256에는 세 가지 규약이 들어 있는데 TLS는 프로토콜, AES_128_GCM은 AEAD 사이퍼 모드, SHA256은 해싱 알고리즘을 뜻합니다.
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_CCM_SHA256
- TLS_AES_128_CCM_8_SHA25
- AEAD(Authenticated Encryption with Associated Data) 사이퍼 모드:
데이터 암호화 알고리즘이며 AES_128_GCM 등이 있습니다. 예를 들어 AES_128_GCM이라는 것은 128 비트의 키를 사용하는 표준 블록 암호화 기술과 병렬 계산에 용이한 암호화 알고리즘 GCM이 결합한 알고리즘을 뜻합니다.
- 세션:
📌 인증 매커니즘
CA(Certificate Authorities, 인증 기관)라는 신뢰할 수 있는 제3자가 발급한 '인증서'를 기반으로 합니다. 이 인증서는 두 가지 중요한 역할을 합니다. 1) 데이터를 암호화할 '공개키'를 클라이언트에 전달하고, 2) 지금 접속한 '서버가 진짜 그 서버가 맞음'을 보장합니다.
인증서에는 서버의 정보(도메인 등), 서버의 공개키, 지문(데이터 요약값), 그리고 이 모든 것이 진짜임을 보증하는 CA의 디지털 서명이 포함됩니다.
참고로 CA는 아무 기업이나 할 수 있는 것이 아니고 신뢰성이 엄격하게 공인된 기업들만 참여할 수 있으며, 대표적인 기업으로는 Comodo, GoDaddy, GlobalSign, 아마존 등이 있습니다.
- 용어 설명:
- 개인키:
비밀키라고도 하며, 개인이 소유하고 있는 키이자 반드시 자신만이 소유해야 하는 키 - 공개키:
공개되어 있는 키 - CA 발급 과정:
자신의 서비스가 CA 인증서를 발급받으려면 자신의 사이트 정보와 공개키를 CA에 제출해야 합니다. 이후 CA는 공개키를 해시한 값인 지문을 사용하는 CA의 비밀키 등을 기반으로 CA 인증서를 발급합니다.
- 개인키:
📌 암호화 알고리즘
실제 데이터를 암호화하기 전에, '이 데이터를 암호화할 비밀 키' 자체를 안전하게 교환해야 합니다. 이때 사용되는 알고리즘이 바로 키 교환 알고리즘입니다. 주로 대수곡선 기반의 ECDHE(Elliptic Curve Diffie-Hellman Ephermeral) 또는 모듈식 기반의 DHE(Diffie-Hellman Ephermeral)를 사용합니다. 둘 다 디피-헬만(Diffie-Hellman) 방식을 근간으로 만들어졌습니다.
- 용어 설명:
- 디피-헬만 키 교환(Diffie-Hellman key exchange) 암호화 알고리즘:
암호키를 교환하는 하나의 방법으로 밑의 식에서 g와 a와 p를 안다면 A는 구하기 쉽지만 g와 A와 p만 안다면 a를 구하기는 어렵다는 원리에 기반한 알고리즘입니다. 처음에 공개 값을 공유하고 각자의 비밀 값고 혼합한 후 혼합 값을 공유합니다. 그다음 각자의 비밀 값과 또 혼합합니다. 그 이후에 공통의 암호키인 PSK(Pre-Shared Key)가 생성됩니다. 이렇게 클라이언트와 서버 모두 개인키와 공개키를 생성하고, 서로에게 공개키를 보내고 공개키와 개인키를 결합하여 PSK가 생성된다면, 악의적인 공격자가 개인키 또는 공개키를 가지고도 PSK가 없기 때문에 아무것도 할 수 없습니다.
- 디피-헬만 키 교환(Diffie-Hellman key exchange) 암호화 알고리즘:

📌 해싱 알고리즘
원본 데이터를 추정하기 힘들도록, 고정된 길이의 '지문'으로 만드는 알고리즘입니다. 데이터가 조금만 달라져도 해시값은 완전히 달라지기 때문에, 데이터가 변조되지 않았음을 확인하는 데 사용됩니다. SSL/TLS는 주로 SHA-256과 SHA-384 알고리즘을 씁니다.
참고로 최신 버전인 TLS 1.3에서는, 사용자가 이전에 방문했던 사이트에 다시 접속할 경우, 복잡한 핸드셰이크 과정을 생략할 수 있습니다. 이를 0-RTT(Zero Round Trip Time)라고 부르며 접속 속도가 훨씬 빨라집니다.
- 용어 설명:
- 해시:
다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 값 - 해싱:
임의의 데이터를 해시로 바꿔주는 일이며 해시 함수가 이를 담당 - 해시 함수:
임의의 데이터를 입력으로 받아 일정한 길이의 데이터로 바꿔주는 함수 - SHA-256 알고리즘:
해시 함수의 결과값이 256비트인 알고리즘이며 비트 코인을 비롯한 많은 블록체인 시스템에서도 사용합니다. SHA-256 알고리즘은 해싱을 해야 할 메시지에 1을 추가하는 등 전처리를 하고 전처리된 메시지를 기반으로 해시를 반환합니다. 예를 들어 어떤 텍스트가 03wer0werf와 같은 알 수 없는 문자열로 변환되는 것을 볼 수 있는데 이에 해당합니다.
- 해시:
📈 SEO에도 도움이 되는 HTTPS
구글(Google)은 SSL 인증서를 강조해왔고 사이트 내 모든 요소가 동일하다면 HTTPS 서비스를 하는 사이트가 그렇지 않은 사이트보다 SEO(Search Engine Optimization) 순위가 높을 것이라고 공식적으로 밝혔습니다.
SEO는 검색엔진 최적화를 뜻하며 사용자들이 검색엔진으로 웹 사이트를 검색했을 때 그 결과를 페이지 상단에 노출시켜 많은 사람이 볼 수 있도록 최적화하는 방법을 의미합니다. 많은 사람이 유입되는 방법으로 캐노니컬 설정, 메타 설정, 페이지 속도 개선, 사이트맵 관리가 있습니다.
📌 캐노니컬 설정
<link rel="canonical" href="https://example.com/page2.php"/>
위 코드처럼 사이트 link에 캐노니컬을 설정해야 합니다.
📌 메타 설정
html 파일의 가장 윗부분인 메타를 잘 설정해야합니다.
📌 페이지 속도 개선
구글의 PageSpeedInsights로 가서 자신의 서비스에 대한 리포팅을 주기적으로 받으며 관리해야 합니다.
📌 사이트맵(sitemap.xml) 관리
사이트맵 제너레이터를 사용하거나 직접 코드를 만들어 구축해 사이트맵을 정기적으로 관리하는 것을 필수입니다.
<?xml version="1.0" encoding="utf-9"?>
<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을 둬서 구축
1. HTTP와 HTTPS 차이점은 무엇인가요?
HTTP와 HTTPS의 가장 큰 차이점은 보안성, 즉 데이터의 암호화 여부입니다. HTTP는 데이터를 텍스트 그대로 주고받기 때문에, 중간에 누군가 가로채면 아이디나 비밀번호 같은 민감한 내용을 그대로 볼 수 있습니다. 반면, HTTPS는 SSL 또는 TLS라는 보안 계층이 추가된 방식입니다. 이 보안 계층이 애플리케이션 계층과 전송 계층 사이에서 모든 통신 내용을 암호화하기 때문에, 만약 해커가 데이터를 가로채도 그 내용을 절대 알 수 없습니다.
2. SSL 및 TLS 기술은 무엇인가요?
SSL과 TLS는 인터넷 통신을 위한 보안 규칙입니다. 클라이언트와 서버가 데이터를 주고받을 때, 제삼자가 메시지를 도청하거나 변조하지 못하도록 막습니다. 덕분에 공격자가 서버인 척하며 중간에서 사용자 정보를 가로채는 중간자 공격을 막을 수 있습니다. 그뿐만 아니라 이 기술은 보안 세션이라는 연결 통로를 기반으로 데이터를 암호화하는데요. 이 보안 세션을 만들 때 서로를 어떻게 믿을지, 어떻게 암호화를 할지, 그리고 데이터가 변조되지 않았는지를 정하게 됩니다.
3. 쿠키와 세션의 차이점은 무엇인가요?
쿠키와 세션은 둘 다 사용자의 상태 정보를 유지하기 위한 방법입니다. 쿠키는 클라이언트, 즉 사용자 브라우저에 저장되고, 세션은 서버에 저장된다는 차이가 있습니다. 쿠키는 브라우저를 닫아도 남을 수 있지만, 세션은 보통 브라우저를 닫으면 사라집니다. 또 세션이 서버에서 관리되기 때문에 보안 면에서는 쿠키보다 더 안전합니다.
'Computer Science > Network' 카테고리의 다른 글
| ⚡️HTTP/3 (0) | 2025.10.28 |
|---|---|
| 🚀 HTTP/2 (0) | 2025.10.28 |
| 🏗️ HTTP/1.1 (0) | 2025.10.27 |
| 🕰️ HTTP/1.0 (0) | 2025.10.27 |
| 🧭 IP 주소 (1) | 2025.10.21 |