HTTPS
HTTPS?
- HTTPS(Hypertext Transfer Protocol Secure)는 HTTP의 확장이며, 컴퓨터 네트워크 상에서 안전한 통신을 위해 암호화를 사용
- 통신 프로토콜이 TLS 또는 SSL (최근에는 TLS)을 사용하여 암호화함
- 즉, HTTP에 TLS를 적용한 것이 HTTPS라고 볼 수 있음
- 간단히 말하면 HTTP 프로토콜에 SSL/TLS 보안 프로토콜을 추가하여 데이터의 암호화, 무결성, 인증을 보장
왜 HTTPS를 써야하는가?
1. HTTPS를 사용하는 웹 사이트는 사용자가 더 신뢰할 수 있음
- 접근하는 웹사이트의 인증과 데이터의 프라이버시 및 무결성 보호
- 특히, 전자상거래 사이트를 구축한다고 치면, 보안은 최우선적 요소
2. SEO 혜택
- Google, Bing, Yahoo같은 검색 엔진은 웹 사이트의 검색 결과의 위치를 지정할 때 200개 이상의 요소를 고려하는데, 그 중 하나가 바로 사이트가 HTTPS로 보호되는 지도 있음
3. 사용자와 웹 사이트 소유자 모두에게 HTTPS가 더 안전
- HTTPS는 SSL/TLS 프로토콜을 사용하여 통신을 암호화하므로, 공격자가 데이터를 탈취할 수 없음
- 원본 서버로 전송되는 데이터와 원본 서버에서 수신되는 데이터의 양방향 전송이 모두 암호화
- MITM(Man-In-The-Middle) 방지 가능
대칭키/비대칭키
HTTPS는 대칭키 암호화 방식과 비대칭키 암호화 방식의 장점만을 사용, 따라서 두 암호화 방식을 사용
대칭키 암호화 :
- 클라이언트 및 서버가 동일한 키를 사용해 암호화/복호화를 진행함
- 키가 노출되면 위험하지만, 연산속도가 매우 빠름
비대칭키 암호화:
- 1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데에 사용
- 공개키는 누구나 볼 수 있고 키가 노출되어도 비교적 안전하지만, 연산 속도가 느림
HTTPS의 경우, 대칭키가 노출되면 위험한 부분을 비대칭키를 활용하여 보완하고, 연산속도가 느린 부분을 연산 속도가 빠른 대칭키로 보완
동작 원리
SSL/TLS 핸드셰이크
(1) ClientHello
: 클라이언트는 서버에게 SSL/TLS 버전, 지원하는 암호화 알고리즘, 세션 ID 등을 전송하며, 핸드셰이크를 개시
(2) ServerHello
: 서버는 클라이언트의 제안 중 하나를 선택하여 응답함
(3) Certificate
: 서버는 자신의 인증서를 Client에게 보냄, 인증서에는 공개 키, 인증서 발급 기관(CA), 유효기간 등이 있음
클라이언트는 인증서의 유효성을 확인하고, 필요에따라 키 교환 메시지를 서버에 보냄
SSL 인증서?
- SSL 인증서는 클라이언트와 서버간의 통신을 제3자가 보증해주는 전자화된 문서
- 클라이언트가 서버에 접속한 직후에 서버는 클라이언트에게 이 인증서 정보를 전달
- 클라이언트는 이 인증서 정보가 신뢰할 수 있는 것인지를 검증 한 후에 다음 절차를 수행
(4) ServerHelloDone
: 서버는 핸드셰이크 메시지의 끝을 클라이언트에 알림
(5) Premaster Secret
: 클라이언트가 Premaster Secret(예비 마스터 암호)라고 하는 무작위 바이트 문자열을 하나 더 전송함. 예비 마스터는 공개 키로 암호화되어 있으며, 서버가 개인키로만 복호화 가능함. 클라이언트는 서버의 SSL 인증서를 통해 공개 키를 받음
(6) ClientKeyExchange
: 서버는 핸드셰이크 메시지의 끝을 클라이언트에 알림
(7) ClientKeyExchange
: 클라이언트는 세션 키를 생성하고 이를 서버의 공개키로 암호화하여 서버에 전송
(8) 핸드셰이크 완료
: 클라이언트와 서버는 모든 필요한 정보를 교환하고, 세션 키를 사용하여 세션 데이터를 암호화 및 복호화
https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/
https://www.cloudflare.com/ko-kr/learning/ssl/why-use-https/
'공부 > Web' 카테고리의 다른 글
HTTP의 특성과 Cookie, 간략히 (0) | 2024.04.30 |
---|---|
웹 성능 개선과 HTTP Cache (0) | 2024.04.30 |
Proxy (0) | 2024.04.30 |
CORS(Cross-Origin Resource Sharing)와 동작 시나리오 (0) | 2024.04.28 |
Load Balancer와 Auto Scaling (1) | 2024.04.26 |