HTTPS
HTTPS란?
HTTPS는 보안계층인 SSL/TLS를 이용해 HTTP의 보안을 강화한 웹 통신 프로토콜이다.
데이터 암호화를 거치지 않고 전송해 보안에 취약한 HTTP의 단점을 보완하기 위해 등장했다.
HTTPS는 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다.
→ SSL(Secure Sockets Layer)은 넷스케이프에서 개발한 암호화 프로토콜
→ 당시 SSL의 몇 가지 문제점을 보완해 새로운 암호화 프로토콜인 TLS(Transport Layer Security) 개발
→ 현재 통용되는 방식은 TLS이지만 명칭을 SSL 또는 SSL/TLS라고 부름
HTTP → SSL/TLS → TCP → IP → 네트워크 인터페이스
HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서 HTTP는 SSL과 통신하고 SSL이 TCP와 통신함
대칭키와 공개키
SSL/TLS에서는 암호화를 위해 2가지 암호화 방식을 사용한다.
대칭 키 암호화 방식
- 데이터의 암호화와 복호화에 모두 같은 키인 대칭 키를 사용하는 방식이다.
- 수신자가 가진 키를 송신자에게 줌 (송신자가 다르면 수신자가 같더라도 다른 키 사용)
- 송신자는 받은 키로 데이터를 암호화한 후 수신자에게 전송
- 수신자는 동일한 키로 데이터를 복호화
- 대칭 키가 유출되지 않도록 주의해야 한다.
공개 키 암호화 방식 (비대칭 키)
- 데이터의 암호화와 복호화를 다른 키로 하는 방식
- 데이터를 암호화 할때는 공개 키를, 데이터를 복호화 할 때는 비밀 키를 이용한다.
- 수신자는 송신자에게 공개키 전달 (송신자가 달라도 공개키는 동일)
- 송신자는 수신자에게 받은 키로 데이터 암호화 후 전달
- 수신자는 비밀 키로 데이터 복호화
- 비밀 키가 있어야만 데이터를 복호화 할 수 있어서 공개 키 유출을 걱정하지 않아도 된다.
- 대칭 키 방식보다 암호화 연산 시간이 더 소요되어 비용이 크다.
공개키 방식은 대칭키 방식에 비해 안전하지만, 계산 과정이 복잡하고 연산 도중 컴퓨터의 자원이 많이 사용한다.
그래서 실제 IT 시스템에서는 공개키 방식과 대칭키 방식을 적절히 혼합하여 사용한다.
암호화 동작방식
공개키 방식은 대칭키 방식에 비해 안전하지만, 계산 과정이 복잡하고 연산 도중 컴퓨터의 자원이 많이 사용한다.
그래서 실제 IT 시스템에서는 공개키 방식과 대칭키 방식을 적절히 혼합하여 사용한다.
공개 키 방식으로 대칭 키를 암호화하고, 실제 데이터를 주고 받을 때는 대칭키를 이용한다.
SSL 핸드셰이크 과정
- Client Hello (클라이언트가 서버에 접속)
- 클라이언트가 서버에 접속하면서 서버에 정보를 전달한다.
- Server Hello (서버가 클라이언트에 응답)
- 서버는 클라이언트에 응답하면서 정보들을 제공한다. (서버의 공개키가 담긴 SSL 인증서 포함)
- 클라이언트는 서버의 SSL 인증서가 올바른지 확인
- 대부분의 브라우저에는 공인된 인증기관 CA에서 만든 정보와, CA의 공개키가 이미 있다.
- 내장된 CA 공개키로 암호화된 인증서를 복호화해서 해당 인증서가 CA가 발급한 인증서인지 확인한다.
- Premaster Secret 생성
- 클라이언트는 자신이 생성한 난수와 서버의 난수를 사용하여 Premaster Secret를 생성하고 서버에 전송한다.
- Premaster Secret 복호화
- 서버는 자신의 비밀 키로 Premaster Secret를 복호화 한 후, Master Secret 값으로 저장한다.
- Master Secret을 사용하여 세션키를 생성한다.
- 세션키는 대칭키 암호화에 사용할 키이고, 이것으로 데이터를 암호화하고 복호화한다.
- 핸드셰이크 종료 및 HTTPS 통신 시작
- SSL 핸드셰이크 단계까지는 공개키 방식, 그 이후의 HTTPS 통신은 대칭키 방식을 사용
DNS
DNS (Domain Name System) 개념
DNS는 호스트의 도메인 네임을 네트워크 주소로 변환하거나 그 반대의 역할을 수행하는 시스템이다.
사용자는 DNS를 통해 서버의 IP 주소를 몰라도 도메인 주소만을 이용해서 서버에 접근할 수 있다
DNS 동작 방식
- 브라우저에 도메인 주소를 입력하면 PC에 설정된 로컬 DNS(통신사) 서버에 해당 도메인과 호스트명의 IP 주소를 요청한다.
- 주소의 정보가 이미 캐싱되어있다면 반환, 없다면 로컬 DNS는 루트 DNS 서버에 IP주소를 요청한다.
- 루트 DNS 서버에서도 찾을 수 없다면 로컬 DNS 서버는c TLD DNS 서버(최상위 도메인 서버)에 다시 IP주소를 요청한다.
- TLD DNS 서버에서도 찾을 수 없다면 Authoritative DNS 서버(최하위 서버)에 다시 IP주소를 요청한다.
- 로컬 DNS 서버는 반환된 IP주소를 캐싱하고 다른 요청이 있을 시 응답할 수 있도록 IP 주소 정보를 PC에 전달한다.
DNS 질의 종류
재귀적 질의 (Recursive Query)
DNS 서버가 클라이언트로 반환할 IP 주소가 있을 때까지 자체적으로 다른 DNS 서버에 계속 질의하는 방식
반복적 질의 (Iterative Query)
로컬 DNS 서버가 여러 DNS 서버에 차례대로 요청하여 IP를 찾는 질의 방식
DNS 레코드 타입
DNS 레코드는 DNS 서버가 패킷을 받았을 때 어떤식으로 처리할 지를 나타내는 지침이다.
DNS 레코드에는 서버가 요청에 응답하는 방법에 대한 다양한 구문과 명령이 포함되어 있다.
레코드의 타입이란 도메인 이름에 어떤 타입의 값이 매핑되는지를 나타낸다.
- A : 도메인 이름을 IP 주소로 매핑
- CNAME : 도메인 이름에 대한 별칭을 매핑
- NS : 권한이 있는 네임 서버를 매핑
UDP
UDP란?
UDP란 전송 계층에 해당하는 네트워크 프로토콜이다.
UDP는 송신부와 수신부 간 연결을 지원하지 않고 데이터그램 형태의 통신을 지원한다.
3-way 핸드셰이킹 같은 과정 없이 패킷을 바로 송수신하게 되어 신뢰성은 낮지만 속도가 빠르다.
UDP 특징
- 송신부와 수신부의 연결이 보장되지 않는 비연결형 서비스이다.
- 패킷이 서로 다른 회선으로 교환될 수 있는 데이터그램 패킷 교환 방식이다.
- 송신부에서 전달한 패킷 순서와 수신부에서 받은 패킷 순서가 다를 수 있다.
- 패킷의 수신 여부를 확인하지 않는다.
- 1:1 통신, 1:N 통신, N:N 통신 모두 가능하다.
- 데이터의 신뢰성이 낮다.
- 데이터의 전송 속도가 빠르다.
UDP의 헤더
- Source Port : 데이터를 생성한 애플리케이션(송신부)에서 사용하는 포트번호
- Destination Port : 목적지 애플리케이션(수신부)이 사용하는 포트 번호
- Length : 헤더와 데이터를 합한 사용자 데이터그램의 전체 길이
- checksum : 데이터그램 전체에 대한 오류 검출을 위한 공간
UDP의 오류 검출 (체크섬)
UDP는 최소한의 신뢰성을 보장하기 위해 체크섬 방식으로 오류를 검출한다.
체크섬 계산 방식
- 체크섬을 만들기 위한 데이터를 모두 더한다.
- 이 때 오버플로우 되는 캐리가 발생하면 해당 캐리를 떼서 데이터에 다시 더한 후 1의 보수를 취해 체크섬을 만든다.
오류 검출 방식
- UCP 송신부는 UDP의 헤더, IP 헤더의 일부 정보와 데이터로 체크섬 값을 생성한다.
- 생성한 체크섬 값을 UDP 헤더의 체크섬 영역에 넣어서 수신부에 보낸다.
- 수신부는 체크섬을 포함한 모든 값을 더해 비트가 모두 1이 나오는지 확인하는 방식으로 검증한다. (수신부와 송신부가 동일한 체크섬 값이 나오는지 검증)
단점
- 체크섬은 데이터를 각각 비교하는 것이 아니라 값을 더해 확인하는 방식이라 데이터의 순서가 바뀌거나 오류가 발생해도 체크섬이 같은 경우에는 오류를 검출할 수 없다.
- UDP의 체크섬은 선택사항이므로 송신부에서 체크섬 값을 0으로 보내면 수신부는 체크섬을 계산하지 않는다.
참고
https://yozm.wishket.com/magazine/detail/1852/
https://inpa.tistory.com/entry/WEB-🌐-DNS-개념-동작-완벽-이해-★-알기-쉽게-정리
https://inpa.tistory.com/entry/NW-🌐-아직도-모호한-TCP-UDP-개념-❓-쉽게-이해하자#📄_udp_헤더_구성
https://inpa.tistory.com/entry/WEB-🌐-DNS-레코드-종류-★-알기-쉽게-정리
https://www.youtube.com/watch?v=sDXcLyrn6gU
기술 면접 대비 CS전공 핵심요약집 | 이수진 https://product.kyobobook.co.kr/detail/S000208504237
'CS' 카테고리의 다른 글
[운영체제] 프로세스 동기화, 데드락 (0) | 2023.10.07 |
---|---|
[네트워크] 네트워크 레이어, IP 프로토콜 (0) | 2023.10.07 |
[운영체제] CPU 스케줄링 (0) | 2023.10.06 |
[네트워크] 신뢰적 데이터 전송, TCP (0) | 2023.10.05 |
[운영체제] 프로세스와 스레드 (0) | 2023.09.22 |