728x90
HTTP (HyperText Transfer Protocol)
- 서버와 클라이언트 간 데이터를 송수신하기 위한 가장 기본적인 프로토콜
- 전송되는 데이터(하이퍼텍스트 문서)가 암호화 되지 않음 -> '스니핑'과 같은 공격에 취약
HTTPS
- HTTP에 SSL (Secure Socket Layer, 보안 소켓 계층)을 추가하여 데이터를 암호화해서 전송 -> 중간에 크래킹을 당해 데이터를 훔쳐도 볼 수 없음
- 실제 데이터는 대칭키 암호화 방식을 사용하여 주고 받게 되고 대칭키를 넘길 때만 공개키 암호화 방식을 사용함 (이유 : 속도)
- HTTP보다 암호화 과정에 드는 시간이 들기 때문에 속도가 느려서 모든 웹 페이지가 HTTPS를 사용하진 않는다.
SSL, TLS
- 클라이언트와 서버간의 통신을 공인된 제 3자가 보증해주는 문서(인증서)
공개키 암호화 방식
- 클라이언트는 공개키, 서버는 개인키를 가지고 데이터 암복호화 작업을 진행
- 공개키로 암호화 -> 개인키로 복호화 가능
- 개인키로 암호화 -> 공개키로 복호화 가능
- 서버는 자신의 공개키를 공개키 저장소 역할을 하는 CA(Certificate Authority) 기업에 보낸다
- 클라이언트는 공개키를 CA기업에서 얻을 수 있다.
- CA 기업은 반드시 신뢰할 수 있는 유명한 기업으로 선택해야 비교적 안전하다!!
TLS, SSL 핸드쉐이크
1. Client hello (Client → Server)
- Client에서 지원하는 SSL 버전, 사용 가능한 암호화 방법 (cipher) 리스트, 클라이언트에서 생성한 난수 전달
2. Server hello (Server → Client)
- Server에서 지원하는 SSL 버전, 선택한 암호화 리스트, 서버에서 생성한 난수 전달
3. Certificate (Server → Client)
- 서버에서는 클라이언트 측으로 서버의 개인키로 암호화한 SSL 인증서를 보낸다. 인증서 안에는 공개키가 포함되어있다.
- 클라이언트 측에선 받은 인증서가 진짜인지 확인하기 위해 CA에서 공개키를 받아서 복호화를 한다. (복호화가 된다면 올바른 인증서)
4. Client Key Exchange
- SSL 인증서 내부의 공개키로 데이터 암호화에 사용할 목적으로 생성한 대칭키를 암호화하여 서버에게 전송
5. ChangeChipherSpec / Finished
- 서로에게 패킷을 보내 데이터를 교환할 준비가 되었음을 알림
- 'Finished' 패킷을 보내어 SSL 핸드쉐이크를 종료한다.
728x90
'Computer Science > 네트워크' 카테고리의 다른 글
[네트워크] HTTP 메서드 (0) | 2020.10.20 |
---|---|
[네트워크] 쿠키 vs 세션 (0) | 2020.10.20 |
[네트워크] TCP의 3-way handshaking, 4-way handshaking (0) | 2020.09.24 |
[네트워크] ARP, RARP (0) | 2020.09.09 |
[네트워크] 서브네팅 (Subnetting) (0) | 2020.09.09 |
댓글