18. HTTP, HTTPS & TLS
출처 : 면접을 위한 CS전공지식 노트(책 / 강의)
URL을 입력하고, 화면을 볼 때까지의 과정
대기열
- URL을 통해 요청을 하면, 브라우저는 URL을 대기열에다 넣는다
캐싱
- 캐싱을 통해 원래 서버에 직접 접근을 하지 않고, 캐시 안에 대기열에 요청한 값을 저장을 한다
- 추후에 같은 값을 요청하면, 이미 저장이 되어 있어, 더 빠르게 반응을 한다
- 또한 직접 서버에 접근을 하는 것이 아니라서, 보안성도 보장이 될 수 있다 (프록시 캐시)
DNS
서버 주소 즉 수신 주소를 찾는 것이다
- 유저가 브라우저 창에 요청한 주소는 컴퓨터가 읽을 수 없다
- 즉 DNS를 통해 브라우저 창에 요청한 주소의 IP주소로 변환해준다
- ARP를 통해서 IP주소의 MAC주소를 찾아준다
TCP, 3웨이 핸드쉐이크
- 유저 기기와 서버 기기의 통신을 연결하기 위해서 TCP를 사용한다
- 연결된 것이 확인이 된다면, 서버에서 다시 HTML 등을 유저에게 응답을 해준다
HTTP/1.x HTTP2, HTTP3의 차이
HTTP는 HyperText Transfer Protocol로 웹에서 정보를 주고 받을 수 있는 프로토콜이다
HTTP/1.0
- 한 번의 연결당 하나의 요청을 처리한다
- 즉 한번의 요청을 처리하면, 똑같은 요청이라도, 다시 연결을 하고 요청을 처리한다
- 3웨이 핸드쉐이크를 요청을 할 때마다 해서, RTT (Round Trip Time)가 증가 한다
- RTT의 증가를 해결하기 위해 몇 가지 방법을 가지고 왔다
- 이미지스플리팅
- 여러 이미지가 있으면, 이미지를 하나의 파일로 모은다
- 그리고 그 하나의 이미지를 기반으로, 포지션을 다르게 해서, 시각화 한다
- 여러 개의 이미지가 아닌, 하나의 이미지를 사용하는 것이라서, 이미지 관련 메모리가 줄어든다
- 코드압축
- 코드의 빈칸들을 없애준다
- 코드 관련해서 메모리를 줄여준다
- Base64인코딩
- 64진법 문자열로 이미지를 인코딩하는 것이다
- 이미지에 대한 HTTP 요청을 할 필요가 없지만, 크기가 커진다
- 이미지스플리팅
HTTP/1.1
- Keep-alive 옵션
- HTTP/1.0의 단점이었던, 하나의 요청 당 한 번의 연결 과정을 해결해준다
- 한번만 연결을 하고 Keep-alive 옵션을 두면, 한번의 연결로 여려개의 파일을 송수신할 수 있다
- HOL blocking (Head Of Line blocking)
- 요청하는 파일들의 크기가 작으면 별로 문제가 없다
- 하지만 요청하는 파일들의 크기가 크다면, 첫 번째 패킷이 지연되면, 뒤의 패킷들에게도 영향을 주게 된다
HTTP/2
- 멀티플랙싱
- HOL blocking을 해결해준다
- 여러 스트림을 사용하여, 앞의 패킷 크기에 상관 없이, 데이터를 송수신 할 수 있도록 한다
- 해더압축
- 허프만 코딩을 이용하여 해더를 압축해준다
- 문자의 빈도 또는 확률정보를 이용해 통계적 압축하는 방법
- 텍스트에서 문자가 출현하는 빈도수에 따라 다른 길이의 부호를 부여한다
- 허프만 코딩을 이용하여 해더를 압축해준다
- 서버 푸쉬
- 클라이언트 요청없이 서버에서 푸쉬하는 것 (HTML 파일을 요청할 때에 알아서 HTML, CSS, JS까지 모두 응답해주는 것)
- 이렇게 하면 HTML을 요청하고 따로 CSS, JS를 요청할 필요가 없다
- 클라이언트 요청없이 서버에서 푸쉬하는 것 (HTML 파일을 요청할 때에 알아서 HTML, CSS, JS까지 모두 응답해주는 것)
HTTP/3
- TCP 기반이 아닌, UDP 기반으로 돌아간다 (QUIC을 이용)
- 즉 초기 연결 설정을 할 때에, 지연시간을 감소한다
- HTTP/2에서의 장점을 모두 가지고 있다
- QUIC - 에러를 검출하면 수신측에서 에러를 수정할 수 있다
HTTPS와 TLS
HTTPS : HyperText Transfer Protocol Secure
TLS : Transport Layer Security
SSL : Secure Socket Layer
- TLS와 SSL, 모두 같다 / SSL이 업데이트 되면서, TLS로 명칭이 바뀌었다
HTTPS는 통신을 주고 받을 때에 데이터를 암호화 한다
- 암호화를 하면, 웹 서비스를 공격하려고 하는 사람이 데이터를 중간에 가로채도 데이터가 암호화가 되어 있어, 쓸모가 없어지게 된다
- 예) 군대에서 통신을 할 때에, 기밀 정보를 대놓고 얘기하는 것 보단, 서로 주어진 규칙을 통해 통신을 하며 데이터를 주고 받는다
- 이는 적이 통신 내용을 이해 못 하도록 하는 것이다
암호화란? (Encryption)
- 허가된 키를 가진 사람만 열거나 해독할 수 있도록 데이터를 스크램블 하는 것이다
- 암호화된 키를 사용하여 메세지를 열면 데이터가 원래 메세지로 돌아간다
- 즉 키 없이 전송되고 열린 모든 메세지는 해독할 수 없고, 정보를 읽을 수 없을 것이
대칭 암호화
- 암호화, 복호화에 사용되는 키가 동일하다
- 예시)
- plain text + key = cipher text : hi + 7ad1056ef6 = X8fasd89FD
- cipher text + key = plain text : X8fasd89FD + 7ad1056ef6 = hi
비대칭 암호화
- 암호화, 복호화에 사용되는 키가 다르다
- 공개 키와 개인 키가 있다
- 공개 키로 암호화 된 데이터는 개인 키로만 복호화 될 수 있다
- 공개키 암호화 ▶️ 개인키 복호화 : 데이터를 안전하게 전송할 수 있는 보안 관점
- 개인키 암호화 ▶️ 공개키 복호화 : 신뢰할 수 있는 단체라는 것을 인증
TLS 핸드쉐이크
TLS가 하는 것
- 암호화 : 제 3자로 부터 전송되는 데이터를 숨길 수 있다
- 인증 : 정보를 교환하는 클라이언트가 같은 클라이언트라는 것을 보장한다
- 무결성 : 데이터가 위조되거나 변조되니 않았는지 확인한다
1 RTT
- Client Hello 를 보내고 Sever Hello를 받으면 통신이 연결되었다고 인증이 된다
- 여기서 비대칭 암호화를 사용한다
- 한번 연결이 된 후, 데이터를 계속 송수신 할 수 있다
- 이때는 대칭 암호화를 사용한다
비대칭 암호화만 사용하는 경우, 연산 작업이 많이 들어가서, 비용이 많이 든다
즉 처음 연결을 인증할 때에는 엄격하게 하되, 그 이후에는 대칭 암호화를 사용한다
Client Hello
- 사이퍼슈트와 클라이언트 랜덤값 (무작위 문자열), 임시 DH 매개변수를 서버로 보낸다
- DH 매개변수 (Diffie-Hellman)
- 상대방의 공개키와, 나의 개인키를 이용고 계산을 통해 비밀키가 나오는 것이다
- 이렇게 비밀키가 나오고 난 후, 상대방과 통신을 할 때에 비밀키를 통해 데이터를 암호화 하면 된다
- DH에 타원곡선 암호화 방법을 통해, 보안을 더 강화키셨다
- 사이퍼 슈트, Cipher Suite
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA256
- TLS_CHACHA20_POLY1305_SHA256
- TLS_AES_128_CCM_SHA256
- TLS_AES_128_CCM_8_SHA256
- TLS : 프로토콜 (TLS 또는 SSL)
- AES_128_GCM : AEAD 사이퍼 모드
- AEAD는 데이터 암호화 알고리즘이고, AES_128_GCM이 AEAD 알고리즘 중 하나
- SHA256 : 해시 알고리즘, 인증서를 확인 할 때에 사용되는 알고리즘이다
Server Hello, Encrypted Extension, Certificate ,Certificate Verify
- Client Hello에 대한 서버의 응답이다
- 서버와 클라이언트가 지원하는 가장 높은 TLS 버전을 결정하고, 사이퍼 슈트 지원 여부를 확인한다
- 클라이언트에 공개키가 포함된 인증서, 서버 랜덤값, 임시 DH 매개변수를 보낸다
- 인증서 : 주체 (CA, 도메인, 웹사이트 소유자, 인증서 소유자)와 공개키로 구성되어 있다
- 주체는 클라이언트가 올바른 웹 사이트에 접속이 되어 있는지 확인한다
- 공개키는 처음 인증작업을 수행할 때에 사용된다
- CA (Certificate Authority)
- 제대로 된 웹 사이트라는 것을 보장해준다
- 검증된 기관에서 CA를 보장해준다
Finished
- 서로 주고 받은 임시 DH 매개변수를 사용하여 임시 암호 키(세션 키)를 생성한다
- 생성한 세션 키를 이용하여 대칭 암호화를 사용하여 통신이 시작된다
0 RTT
- 한번 세션키가 만들어지면, 클라이언트와 서버간에 인증을 추가적으로 할 필요가 없다
RSA
공개키 암호시스템의 하나다
비대칭키 알고리즘의 대표적인 알고리즘이다
하지만 DH 매개변수를 더 많이 사용한다
- RSA 클라이언트에서 생성한 암호값이 탈취되면, 해킹의 위험성이 있다
'독서 > CS 노트' 카테고리의 다른 글
20. 웹브라우저의 캐시 [HTTP 해더, 쿠키] (0) | 2023.03.03 |
---|---|
19. 웹브라우저의 캐시 [로컬 스토리지, 세션 스토리지] (0) | 2023.03.03 |
17. 라우팅 (0) | 2023.03.01 |
16. IP주소 체계 [클래스풀, 클래스리스] (1) | 2023.03.01 |
15. IP주소 체계 (0) | 2023.02.28 |