[One Day One Question]
HTTPS는 HTTP와 어떤 차이점이 있으며, HTTPS가 보안을 강화하는 원리는 무엇인가요?
HTTP와 HTTPS의 차이점
HTTP와 HTTPS는 인터넷에서 데이터를 주고받는 데 사용되는 프로토콜이지만, 보안 측면에서 큰 차이가 있습니다.
1. HTTP (HyperText Transfer Protocol)
- 데이터를 암호화하지 않고 평문(Plain Text)으로 전송합니다.
- 네트워크 상에서 제3자가 데이터를 쉽게 읽거나 조작할 수 있습니다.
- 기본적으로 포트 80번을 사용합니다.
2. HTTPS (HyperText Transfer Protocol Secure)
- HTTP에 SSL/TLS(암호화 프로토콜)를 결합하여 데이터를 암호화하여 전송합니다.
- 제3자가 데이터를 읽거나 변조하기 매우 어렵습니다.
- 기본적으로 포트 443번을 사용합니다.
HTTPS가 보안을 강화하는 원리
HTTPS는 SSL/TLS를 활용하여 데이터를 암호화하고, 데이터의 무결성과 인증을 제공합니다. HTTPS의 보안 원리는 아래 세 가지 주요 요소로 나뉩니다:
1. 데이터 암호화
- 클라이언트(브라우저)와 서버 간의 데이터가 암호화되어 전송됩니다.
- 암호화 방식으로 대칭키 암호화와 비대칭키 암호화가 사용됩니다.
- 대칭키: 데이터를 암호화하고 복호화할 때 동일한 키를 사용.
- 비대칭키: 공개키(Public Key)로 암호화하고, 개인키(Private Key)로 복호화.
2. 데이터 무결성
- 데이터가 전송 중에 변조되었는지 확인할 수 있습니다.
- 이를 위해 해시(Hash) 값을 사용하여 전송된 데이터와 원본 데이터의 동일성을 확인합니다.
3. 서버 인증
- HTTPS는 서버의 신뢰성을 보장하기 위해 디지털 인증서를 사용합니다.
- 디지털 인증서는 인증 기관(CA, Certificate Authority)에서 발급하며, 클라이언트는 이를 통해 서버가 진짜인지 확인할 수 있습니다.
꼬리 질문 : SSL/TLS Handshake 과정은?
SSL/TLS Handshake는 클라이언트와 서버 간에 안전한 연결을 설정하는 과정입니다.
1. 클라이언트 헬로(Client Hello)
- 클라이언트가 서버에 연결 요청을 보냅니다.
- 클라이언트가 지원하는 TLS 버전과 암호화 알고리즘 목록, 랜덤 데이터를 서버에 전달합니다.
2. 서버 헬로(Server Hello)
- 서버가 클라이언트 요청에 응답합니다.
- 서버가 사용할 TLS 버전과 암호화 알고리즘을 선택하고, 서버의 랜덤 데이터를 보냅니다.
- 서버의 디지털 인증서(공개키 포함)를 클라이언트에 보냅니다.
3. 서버 인증
- 클라이언트는 서버의 디지털 인증서를 확인합니다.
- 인증서가 신뢰할 수 있는 CA에서 발급되었는지 확인.
- 인증서의 유효 기간과 도메인이 일치하는지 검증.
4. 키 교환(Key Exchange)
- 클라이언트는 서버의 공개키를 사용해 **프리마스터 시크릿(Pre-Master Secret)**를 암호화하여 서버에 보냅니다.
- 서버는 자신의 개인키로 이를 복호화하여 프리마스터 시크릿을 복원합니다.
5. 세션 키 생성(Session Key)
- 클라이언트와 서버는 각각의 랜덤 데이터와 프리마스터 시크릿을 조합하여 대칭키(Session Key)를 생성합니다.
- 이 키는 이후 데이터 암호화에 사용됩니다.
6. 완료(Finished)
- 클라이언트와 서버가 세션 키로 "Finished" 메시지를 암호화하여 주고받습니다.
- 양측 모두 세션 키가 동일하게 설정되었음을 확인하고, 안전한 통신이 시작됩니다.
'cs > ODOQ' 카테고리의 다른 글
[ODOQ] JPA의 N + 1 (0) | 2024.11.25 |
---|---|
[ODOQ] TCP와 UDP의 차이점 (1) | 2024.11.25 |
[ODOQ] 엔티티 매니저란? (0) | 2024.11.22 |
[ODOQ] JPA의 ddl-auto 옵션 (0) | 2024.11.22 |
[ODOQ] Spring Data JPA에서 새로운 Entity인지 판단하는 방법 (0) | 2024.11.21 |