HTTPS(Hypertext Transfer Protocol Secure)
- HTTP의 확장 버전 또는 더 안전한 버전, 즉 신뢰할 수 있는 HTTP 요청
- 전송중의 메시지를 전송 계층 보안 (TLS, Transport Layer Security) 프로토콜을 사용해 암호화하는 HTTP의 보안 버전
🤔 SSL/TLS??
애플리케이션 계층과 전송 계층 사이에 신뢰 계층

- HTTPS에서는 브라우저와 서버가 데이터를 전송하기 전에 안전하고 암호화된 연결을 설정
- HTTP/2는 HTTPS 위에서 동작
🤔 HTTPS는 왜 필요할까?
HTTP는 원래 일반 텍스트 프로토콜! HTTP 메시지는 인터넷을 통해 암호화되지 않은 상태로 전송
→ 메시지가 목적지로 라우팅될 때 메시지를 보는 모든 참여자가 읽을 수 있음.
→ 보안상 문제
- 전송 계층에서 보안을 제공하는 프로토콜
- 서버, 애플리케이션, 사용자 및 시스템 간의 데이터를 암호화하는 통신 프로토콜
→ 클라이언트와 서버가 통신할 때 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(세션)
운영체제가 어떠한 사용자로부터 자신의 자산 이용을 허락하는 일정한 기간
즉, 사용자는 일정 시간 동안 응용 프로그램, 자원 등을 사용할 수 있다.

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 인증서 발급 과정
- 자신의 서비스가 CA 인증서를 발급받으려면 자신의 사이트 정보와 공개키를 CA에 제출해야 함
- 이후 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가 없기 때문에 아무것도 할 수 없게 된다.
→ 키를 암호화할 수 있음!
- 앨리스와 밥이 서로의 비밀키를 공유하려고 한다.
- 앨리스와 밥은 각각 개인키(Private key)를 생성한다. (Alice의 개인키는 Xa, Bob의 개인키는 Xb)
- 앨리스와 밥은 자신들의 개인키로부터 공개키(Public Key)를 생성한다. (Alice의 공개키는 Ya, Bob의 공개키는 Yb)
이때 개인키로부터 공개키를 수하는데 사용되는 수학적 공식은 다음과 같다.
🤔공개키를 알면 개인키를 구할 수 있는 거 아니야?
- 개인키로 부터 공개키를 계산하는 것은 쉽지만 공개키로부터 개인키를 계산하는 것은 굉장히 어려움
- 이산로그의 성질을 사용! (Ex. y = log x에서 x값만 알면 y는 구하기 쉬움. 그러나 y를 통해 x를 구하기 어려움)
- 앞의 식에서 g와 x와 p를 안다면 y는 구하기 쉽지만 g와 y와 p만 안다면 x를 구하기는 어렵다는 원리에 기반
- 앨리스와 밥은 각자의 공개키(Ya, Yb)를 상대방에게 전달
- 앨리스는 자신의 개인키(Xa) + 밥의 공개키(Yb)로 새로운 비밀키 Z를 생성, 밥은 자신의 개인키(Xb) + 앨리스의 공개키(Ya)로 새로운 비밀키 Z 생성
- 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 구축 방법
- 직접 CA에서 구매한 인증키를 기반으로 HTTPS 서비스를 구축
- 서버 앞단의 HTTPS를 제공하는 로드밸런서를 둠
- 서버 앞단에 HTTPS를 제공하는 CDN을 둬서 구축
😎 참고자료
면접을 위한 CS 전공지식 노트
HTTP guide
How does HTTPS work? What's a CA? What's a self-signed Certificate?
웹 기술과 HTTP
HTTP와 HTTPS의 차이점은 무엇인가요?
키 교환 및 비대칭키 암호화
SEO 초보자를 위한 '캐노니컬 태그' 설명하기