Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

요리사에서 IT개발자로

스파르타 코딩클럽(부트캠프) 10장 HTTP/HTTPS 본문

Computer Science

스파르타 코딩클럽(부트캠프) 10장 HTTP/HTTPS

H.S-Backend 2024. 3. 28. 14:48
  1. HTTP와 HTTPS는 모두 인터넷 상에서 정보를 주고 받을 때 사용하는 프로토콜이다.
  2. HTTPS는 SSL/TLS 프로토콜을 사용하여 암호화된 통신을 제공한다.
  3. 대칭키와 비대칭키를 모두 사용하는 SSL Handshake 과정을 거쳐 서버와 클라이언트가 안전하게 데이터를 주고 받을 수 있다.

네트워크의 기본구조

 

네트워크란 정보가 전송되는 경로

 

LAN ( Local Area Network)

사무실이나 빌딩처럼 비교적 좁은 범위의 네트워크

 

  • LAN을 통하여 건물의 네트워크에 접속하거나 자원을 공유할 수 있다.
  • WIFI 공유기를 통하여 노트북이나 핸드폰으로 인터넷에 연결하게 해준다.
  • WIFI 공유기를 통하여 컴퓨터에서 프린터에 연결하게 해준다.

출처 : 스파르타 코딩클럽

WAN(Wide Area Network)

서로 떨어져 있는 LAN 사이를 전용선 등으로 연결한 광역네트워크

출처 : 스파르타코딩클럽


클라이언트와 서버

 

클라이언트 
  • 네트워크상 서버에게 서비스를 요청하는 장비
  • 컴퓨터, 노트북, 핸드폰, 아이패드 등이 있다.
서버
  • 네트워크상에서 서비스를 제공하는 장비
  • 공유기, 도메인 관리기(DNS), IP 할당기(DHCP), 시간관리기(NTP), 게이트웨이 등이 있다.

출처 : 스파르타코딩클럽


서버 종류 및 서비스
  • 공유기 : 네트워크에서 파일이나 프린터를 공유하게 해준다.
  • 도메인 관리기(DNS) : 도메인 주소로 IP주소를 찾게 해준다.
  • IP 할당기(DHCP) : 네트워크에 새로 접속한 장비를 IP주소와 네트워크 설정을 해준다.
  • 시간 관리기 (NTP) : 네트워크상에 장비들의 시간을 알맞게 맞춰준다.
  • 게이트웨이 : 여러대의 장비가 외부 네트워크에 접속하게 해준다.

출처 : 스파르타코딩클럽


OSI 7계층 참조 모델 계층 대 계층 통신

계층 이름 설명
7계층 응용 계층(Application) 애플리케이션 서비스 제공
6계층 표현 계층(Presentation) 문자코드, 압축, 암호화
5계층 세션 계층(Session) 통신 방식 결정
4계층 전송 계층(Transport) 신뢰성 있는 통신 구현
3계층 네트워크 계층(Network) 다른 네트워크와 통신하기 위한 IP주소 결정
2계층 데이터링크 계층(Data Link) 물리주소 결정
1계층 물리 계층(Physical Layer) 물리적인 연결과 전기신호 변환
계층간 인터페이스
  • 자신의 바로 위 계층에 제공되는 정보와 서비스를 정의한다.

 

계층 기본구조

계층 1,2,3(네트워크 지원계층)
  • 하나의 장치에서 다른 장치로 전송되는 데이터의 물리적인 면을 처리한다.
계층 5,6,7(사용자 지원계층)
  • 관계 없는 소프트웨어 시스템 간상호 운용성을 제공한다
제공4 (전송계층)
  • 네트워크 지원 계층과 사용자 지원 계층을 서로 연결하고 네트워크 지원 계층이 전송한 것 사용자 지원 계층이 사용할수 있는 형태가 되도록 보장한다.

출처 : 스파르타코딩클럽


IP주소란 (Internet Protocol Address)

인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버 장비, 스마트폰 등)을 식별할 수 있도록 각가의 장비에게 부여되는 고유주소이다.
인터넷에 연결된 모든 컴퓨터는 IP주소를 갖는다.

  • IPv4 : 현재 전세계적으로 보편화 되어 사용되는 IP버젼.
  • IPv6 : 확장성과 용량 면에서 한계를 보이는 IPv4를 대체할 버젼
구분 IPv4 IPv6
주소 길이 32bit 128bit
표시 방법 4개 부분에 8bit 씩 10진수로 표시 8개 부분에 16bit씩 16진수로 표시
주소 개수 약 256*256*256*256 = 약 43억 약 43억* 43억*43억*43억

포트란 (Port)

직역하면 항구 라는 뜻으로 컴퓨터 관련 분야에서의 의미는 운영 체제 통신에서의 종단점 을 뜻한다.
IP Address를 통해 목적지 호스트까지 도달한 후에는 어떤 프로세스(Process)에서 데이터를 받을 것인지를 알아야 할때 쓰이는 것이 포트 번호(Port Number)이다.

출처 : 스파르타 코딩클럽

구분 포트 범위 설명
잘 알려진 포트(well-known-port) 1~1023 공식적으로 지정되어 있는것도 있으며 아닌것도 있다.
이미 알려져 있는 것들이 많은 구간이며 대표적으로 80(http), 443(https)
등록된 포트(registered port) 1024~49151 사용자가 직접 등록하여 사용할 수 있는 포트
동적 포트(dynamic port) 49152~65535 매번 접속할 때마다 포트번호가 변경되며 인터넷이나 시스템에서 사용할 때 동적으로 할당하는 포트

DNS 란 (Domain Name System)

도메인 네임은 IP주소를 사람들이 이해하기 쉽게 문자로 표현한 것

 

컴퓨터끼리 IP주소로 서로간의 위치를 확인 및 통신, 도메인 네임을 식별할수 없기 때문에 도메인 네임을 할당하고 이를 관리하는 시스템을 DNS라 한다.

출처 : 스파르타 코딩클럽


도메인은 웹페이지 URL에 포함된다.

출처 : 스파르타 코딩클럽


DNS 서버가 IP주소를 전달하는 방법

출처 : 스파르타 코딩클럽


패킷이란 (Packet)

네트워크 계층에서 데이터를 전송할 때 나눠서 전송하는 데이터 조각 단위이다.

 

이러한 패킷으로 데이터를 전송하는 방식을 패킷 교환 방식이라 한다.
의미
  • 3계층(네트워크 계층)을 통하여 전달받는 작은 데이터 단위
용도
  • 인터넷에서 하는 모든 작업에는 패킷이 사용된다.
  • 인터넷에서 사용자 간 데이터를 주고 받을 때 데이터 패킷으로 전달된다.(패킷 교환 네트워크)
특징
  • 데이터는 패킷으로 나뉘어서 보내진다.
  • Ex) 사진 -> 여러개의 패킷 분할 ->수신하는 컴퓨터->여러개의 패킷분할 -> 원본 사진(파편화된 데이터 블록)
구조
  • 해더 : 패킷 길이, 프로토콜, 송/수신 사람의 IP 주소 등이 포함
  • 페이로드 : 패킷의 본문
  • 트레일러 : footer라고 불리며 패킷의 끝에 도달했음을 수신 컴퓨터에 알리는 비트가 담겨있다.
역사
  • 옛날에 사용하던 회선 교환(Circuit Switching) 방식
  • 회선의 트래픽이나 이동 효율을 전혀 고려하지 않은 채 미리 정하는 방식

출처 : 스파르타 코딩클럽


데이터를 전송하는 시점의 트래픽, 혼잡도 등의 요인에 따라 효율이 달라지기에 이러한 단점들을 개선하기 위해 새로운 통신방식이 만들어졌다.

패킷교환 (Packet Switching)방식이란

미리 이동경로를 정하지 않으며 데이터를 패킷(Packet) 이라는 작은 단위로 나누어 전송하는 방식

출처 : 스파르타 코딩클럽

  1. 전송될 데이터는 네트워크를 통해 전송되기 전 패킷으로 나눈다.
  2. 각 패킷에는 고유번호가 지정되어 있어 네트워크를 거친다.
  3. 최종 수신지에 도착 했을 때 번호 순서대로 결합된다.
  4. 원래 데이터로 완성.
회선 통신과 다르게 각 패킷은 전송 당시 가장 효율적인 경로를 설정 후 최종 목적지까지 이동하게 된다.

패킷으로 나누는 이유

커다란 데이터가 네트워크의 대역폭을 너무 많이 차지(점유)하면 다른 패킷의 흐름을 막을 위험이 생긴다.(독점)

TCP/ IP

IP + TCP = 인터넷 프로토콜 + 전송 제어 프로토콜
3계층의 IP + 4계층의TCP 프로토콜의 이름을 따서 TCP/IP라 한다.
주 HW계층인 1~2계층과 주 SW계층인 5(5~7) 계층 중간에 위치해서 규칙으로만 동작하는 3, 4 계층이기 때문이다.

 

IP (Internet Protocol)

  • 3계층이며 네트워크계층의 프로토콜이다.
  • 패킷들을 가장 효율적인 방법으로 최종 목적지로 전송하기 위해 필요한 프로토콜이다
  • 패킷 전달 여부와 순서를 보장하지 않는다.(비연결형 프로토콜)

TCP (Transmissin Control Protocol)

정의 
  • 한 기기에서 다른기기로 패킷을 안전하게 전달해주는 전송 프로토콜이다.
  • 오류가 발생시 데이터를 재전송 할수 있다.(연결 지향형 프로토콜)
  • IP위에서 동작하며 데이터의 전달과 순서를 보장한다.
흐름제어
  • 송신측과 수신측 데이터 처리 속도차이를 해결하기 위한 기법이다.
혼잡제어
  • 송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법이다.
효율적으로 빠르게(IP) 보내면서 안전하게(TCP) 전달 해주려는 목적

출처 : 스파르타 코딩클럽

TCP를 기반으로 한(신뢰성 통신) HTTP, FTP, SMTP 등 수많은 프로토콜들이 IP위에서 동작하기에 묶어서 TCP/IP라 한다.

IP프로토콜

정의
  • IP는 TCP/IP 네트워크를 통하여 전송하는 데이터의 기본 단위
  • 데이터를 최적의 경로를 선택하는 라우팅 기능을 수행
  • 네트워크에서 송신 측이 동일한 수신 측으로 전송하는 데이터 그램이 다양한 경로를 통하여 도착한다.

출처 : 스파르타 코딩클럽

IP프로토콜에 따라 네트워크를 연결하고 TCP프로토콜에 따라 데이터를 정상적 전송하도록 한다.

 


TCP Hand Shake

3-way hand shake란

두 종단 간 정확한 데이터 전송을 보장하기 위해 연결을 설정하는 과정이다.

 

클라이언트와 서버가 3-way hand shake를 통해 연결을 생성하는 과정

출처 :스파르타 코딩클럽

  1. 클라이언트에서 연결 생성을 위해 SYN을 요청
  2. 서버에서 생성 한다는 ACK 응답
  3. 클라이언트에서 생성 확인 했다는 ACK응답
  4. 서버에서 클라이언트로 부터 생성확인했다는 ACK 응답
  5. 최종 연결 생성 완료.
3-way hand shake 를 통해 연결이 생성되는 시간은 Connection Time 이라 한다.

출처 : 스파르타 코딩클럽


4 - way hand shake 란

두 종단 간 데이터 전송을 끝낸 후 연결 설정을 해제하는 과정이다.

 

연결이 생성된 후 부터 DATA를 전송, 수신처리를 거친 후 FIN 명령을 통하여 연결을 종료한다.

출처 : 스파르타 코딩클럽

  1. 서버 - 클라이언트 연결 생성
  2. 클라이언트에서 요청할 DATA 전송
  3. 서버에서 전달 받았다는 ACK 전송
  4. 클라이언트가 연결 종료를 위해 FIN 전송
  5. 서버가 연결 종료하겠다는 ACK, FIN 전송
  6. 클라이언트도 종료했다는 ACK 전송
  7. 서버도 ACK 수신 후 최종 종료

TCP와 UDP

  • TCP  : 프로토콜 내 여러 규칙으로 인해 신뢰성 높은 연결을 지원하지만 속도가 느리다.
  • UDP : 프로토콜 내 규칙을 간소화하여 신뢰성 낮은 연결 지원하지만 속도가 빠르다.

출처 :스파르타 코딩클럽


UDP 일방적으로 서버가 전송하는 프로토콜
Ex) 유투브 영상 스트리밍, HTTP3 등

출처 :스파르타 코딩클럽


TCP Header vs UDP Header

TCP : 신뢰성 확보, 속도 지연

UDP : 신뢰성 낮음, 속도 빠름

 UDP로 지연을 줄이며 커스텀 헤더를 사용하여 TCP 의 신뢰성을 확보한다.Ex) HTTP3, QUIC(구글)

HTTP

HTTP란 (Hypertext Transfer Protocol)

서로 다른 시스템들 사이에서 통신을 주고받게 하는 가장 기본적인 프로토콜
서버에서 브라우저로 데이터를 전송하는 용도로 가장 많이 사용된다.
  • 전송되는 요청/응답 정보가 기본적으로 암호화 되어있지 않아서 보안정보 도난의 위험이 있다.
  • 웹상에서 클라이언트와 서버간 통신을 위한 프로토콜 중 하나이다.

출처 : 스파르타 코딩클럽

웹상에서 클라이언트와 서버 간 통신을 위한 프로토콜
어플리케이션 계층 프로토콜

 

정의
  • 클라이언트와 서버 간 자원을 교환하기 위한 TCP/IP 기반 통신 프로토콜이다.(규약, 약속)
특징
  • 단방향성 : 서버가 먼저 응답을 보낼 수 없고 클라이언트가 요청을 보내야만 응답할 수 있다.(2버전 이상)
  • 비연결성 : 클라이언트의 요청으로 서버와 연결된 후 요청에 대한 응답의 데이터를 전송하면 연결을 종료.
  • 실시간 통신 불가능하다.
문제점
  • HTTP는 평문 통신이기에 도청이 가능하다.
  • 통신 상대가 검증된 상대인지 확인하지 않기에 위장이 가능하다.
  • 완전성을 증명할 수 없어 변조가 가능하다.

출처  스파르타 코딩클럽


HTTP 버전 : v1.0>v1.1>v2.0>v3.0

전 세계적으로 HTTP/1 (HTTP 버전 1.1)을 많이 사용한다.
현재 HTTP/3까지 메이저 버전이 발표 되었다.
HTTP/1 -> HTTP/2 15년
HTTP/2 -> HTTP/3 4년

HTTP/1의 한계
  • 일회용으로 사용한 후 버려야한다.
  • 1.0이 발표될 당시 다양한 표준화가 진행되었으나 후에 HTTP의 1.1버전이 발표되어 사용되고있다.

출처 : 스파르타 코딩클럽


HTTP/1.1의 핵심 개선점
  • 연결재사용 가능하다.
  • 기존에 요청별 연결(Connection)을 생성해야 했던 문제를 해결
  • 연결을 생성할 시 지정한 시간동안은 재사용 하는 방식이다.

출처 : 스파르타 코딩클럽


HTTP/2의 핵심 개선점
  • Head Of Line Blocking 문제 해결
  • HTTP/1에서 병렬로 요청을 수신해도 동시에 응답을 해야하는 문제가 있었다.
  • HTTP/2에서는 요청을 프레임으로 쪼개 순서 상관없이 처리하도록 해결되었다.

출처  스파르타 코딩클럽


Sever Push
  • HTTP/2 에서는 연결 생성 후 클라이언트의 요청없이 서버가 응답해줄 수 있다.

출처 : 스파르타 코딩클럽


전 세계의 HTTP/2 점유율은 40%정도 HTTP/3는 아직 지원하는 곳이 많지 않다.
(네이버, 인스타, 페이스북 HTTP/2)

출처 : 스파르타 코딩클럽

HTTP/3는 HTTP/1, HTTP/2와 달리 TCP가 아닌 UDP기반이다.

웹소캣(WebSocket) = 실시간 통신 서비스

TCP 기반의 통신 프로토콜이며 데이터 전송이 끝나고 연결을 해제하지 않고 양방향 통신이 가능하다.

 

웹소켓이 나오기 전에는 HTTP로 폴링(polling), 롱폴링(Long-polling), 스트리밍(streaming)등 실시간 통신처럼 보일 수 있게하는 방식을 사용한다.

HTTP 메소드

클라이언트가 웹 서버에게 요청의 목적이나 종류를 할려는 수단이다.

 

GET
  • 보통 리소스 할 때 사용한다.
  • 서버에 전달하고 싶은 데이터는 Query를 통해 전달한다.
  • 메시지 바디를 사용해서 데이터를 전달 할 수 있으나 지원하지 않는 곳이 많아서 권장하지 않는다.
POST
  • 주로 리소스를 새롭게 생성할 때 사용한다.
  • 서버에 전달하고 싶은 데이터는 메세지 바디를 통해 전달한다.
PUT
  • 리소스가 있으면 대체하고 없으면 생성한다.
  • 데이터를 덮어쓴다.
PATCH
  • PUT 과 마찬가지리소스를 수정할 때 사용한다
  • PATCH는 리소스의 일부분만 변경 할 때 사용한다.
DELETE
  • 리소스를 제거할 때 사용한다.

메소드 속성

출처 : 스파르타 코딩클럽

안전 (Safe Methods)
  • 계속 호출해도 리소스를 변경하지 않는 특성
멱등(Idempotent Methods)
  • 동일한 요청을 여러 번 보내도 한 번 보내는 것과 똑같은 결과를 갖는다.
  • GET, PUT, DELETE는 멱등하다고 볼 수 있으나 POST나 PATCH는 멱등하다.
캐시가능 (Cacheable Methods)
  • 응답 결과를 서버에 캐시하여 사용해도 되는 메소드이다.
  • GET, HEAD, POST, PATCH가 캐시가 가능하나 구현이 어렵다.
  • 실제로 GET과 HEAD만 주로 캐싱이 쓰인다.

HTTP 상태코드

클라이언트가 보낸 요청의 처리 상태 or 결과를 응답에서 알려주기 위한 정보이다.

 

종류

1xx (Informational) :요청이 수신되어 알려준다.
2xx (Successful) ; 처리성공
  • 200OK : 요청 성공
  • 201 Created : 요청 성공하여 새로운 리소스가 생성되었다.
  • 202 Accepted : 요청이 접수 되었으나 처리가 완료되지 않았다.
  • 204 No Content : 서버가 요청을 성공적으로 수행하엿으나 응답 페이로드 본문에 보낼 데이터가 없다.
3xx(Redirection) : 다른곳에 요청해라.
요청을 완료하려면 추가 행동이 필요한데 보통 리다이렉션 (넘기기)처리를 한다. 
  • 301 Moved Permanently : 리다이렉트시 요청 메소드가 GET으로 변하고 본문이 제거 될 수 있다.
  • 302 Found : 리다이렉트시 요청 메소드가 GET으로 변하고 본문이 제거 될 수 있다.
  • 303 See Other : 리다이렉트시 요청 메소드가 GET으로 변경한다.
  • 304 Not Modified : 캐시를 목적으로 사용한다.
  • 307 Temporary Redirect : 리다이렉트시 요청 메소드와 본문을 유지한다 (요청 메소드를 변경하면 안된다.)
  • 308 Permanent Redirect : 리다이렉트시 요청 메소드와 본문을 유지한다.(첫 POST를 보내면 리다이렉트도 POST유지)
4xx(Client Error) : 잘못된 요청(에러)
클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없다.
  • 400 Bad Request : 클라이언트가 잘못된 요청을 하여 서버가 요청을 처리 할 수 없다.
  • 401 Unauthorized : 클라이언트가 해당 리소스에 대한 인증을 필요로한다.
  • 403 Forbidden : 서버가 요청을 이해했으나 승인을 거부한다.
  • 404 Not Found : 요청 리소스를 찾을 수 없다.
5xx(Server Error) : 서버가 이상하다.(에러)
서버 오류, 서버가 정상 요청을 처리하지 못한다.
  • 500 Internal Server Error : 서버 문제로 오류가 발생한다.(보통 500 오류)
  • 501 Not Implemented : 서버에 해당 기능이 없다.
  • 502 Bad Gateway : 게이트웨이(서로 다른 프로토콜을 연결 해주는 장치)가 잘못된 프로토콜을 연결하거나 어느쪽프로토콜에 문제가 있어서 통신이 제대로 되지 않는 상황이다.
  • 503 Service Unavailable: 서비스 이용이 불가능하다. (서버가 다운되었을 때)

  1. HTTP 메소드나 상태코드 그리고 REST 같은 것들은 가이드라인이다.
  2. HTTP 메소드나 상태코드들을 지키지 않아도 프로그램이 작동하고 사용자가 프로그램을 사용하던 도중 런타임 에러가 발생하는 일도 발생하지 않는다.
  3. 이러한 규칙들을 지키지 않아도 되지만 그로 인해 발생하는 사이드 이펙트들을 보았을 때 지켜주는 것이 좋다.
표준인터페이스가 존재하는 이유가 있다.

HTTP 통신흐름

  1. 브라우저에 www.naver.com  입력
  2. 사용자가 입력한 URL 주소 중 도메인 네임 부분을 DNS 서버에 검색, DNS서버에서 해당 도메인 네임을 해당하는 IP 주소를 찾아온다.
  3. HTTP 프로토콜을 사용하여 페이지 URL 정보와 찾아온 IP주소를 포함하는 HTTP 요청메시지를 생성하고 생성된 HTTP 요청 메세지는 TCP/IP 프로토콜을 사용하여 인터넷망을 총해 해당 IP주소의 컴퓨터로 전송된다.
  4. HTTP 요청 메세지를 받은 컴퓨터(서버)는 웹페이지 URL 정보는 PATH(경로) 와 HTTP Method(동작)에 맞는 액션을 취한다.
  5. 생성된 응답 데이터는 또 다시 HTTP 프로토콜을 사용하여 HTTP 응답 메세지로 만들어지고 TCP/IP 프로토콜을 사용하여 인터넷 망을 통해 요청했던 컴퓨터(클라이언트) 로 전송한다.
  6. 도착한 HTTP 응답 메세지는 웹 브라우저에 의해 브라우저 렌더링 과정을 거쳐 화면에 출력 및 사용자가 볼 수 있게 된다.

브라우저 렌더링 과정

출처 : 스파르타 코딩클럽

  1. 1~4 HTML 파일과 CSS 파일을 파싱하여 DOM Tree*, CSSOM Tree *를 만든다.(Parsing)
  2. 두 Tree를 결합하여 Rendering Tree*를 만든다.(Style)
  3. Rendering Tree에서 각 노드의 위치와 크기를 계산한다.(Layout)
  4. 계산된 값을 이용하여 각 노드를 화면상 실제 픽셀로 변환하고 레이어를 만든다. (Paint)
  5. 레이어를 합성하여 실제 화면에 나타낸다.(Composite)

DOM Tree, CSSOM Tree, Render Tree

출처 : 스파르타 코딩클럽
출처 : 스파르타코딩클럽


HTTPS

HTTPS란 (Hypertext Transfer Protocol Secure)

HTTPS는 전송되는 요청/응답 정보가 기본적으로 암호화 되지 않아 보안정보 도난의 위험이 있다.
이를 해결하기 위해 SSL을 사용한다.
정의
  • HTTP(HyperText Transfer Protocol)의 보안(Secured)버전
  • SSL/TLS 프로토콜을 사용 및  HTTP를 암호화하여 송/수신 할 때 쓰는 통신 프로토콜이다
 SSL : 보안 소켓 계층 (Secure Sockets Layer)
  • Netscape 사에서 웹서버와 웹브라우저간의 보안을 위하여 만든 프로토콜(규칙이다.)
  • 대칭키와 비대칭키 기반으로 사용한다.
  • SSL은 서버와 브라우저 사이에 안전을 위해 암호화 된 연결을 만들 수 있도록 도와주며 서버와 브라우저가 보안정보를 주고 받을 경우해당 정보가 도난 당하는것을 막아준다.
TLS : 전송 계층 보안(Transport Layer Sevurity)
  • TLS는 SSL의 향상된 안전한 버전이다.
  • SSL이 더욱 일반적인 용어이기에 DigiCert는 보안 인증서를 여전히 SSL로 언급하지만 DigiCert에서 SSL을 구입할 시 최신 TLS인증서를 받을 수 있다.
웹사이트가 SSL/TLS 인증서로 보호되는 경우 HTTPS가 URL에 표시된다.
사용자는 브라우저 표시줄의 자물쇠 기호를 클릭하여 발급기관이나 웹사이트 소유자의 상호를 포함한 인증서의 세부정보를 볼 수 있다.
방법
  • 대칭키와 비대칭키를 모두 사용한다.
  • 대칭키와 공개키or개인키(비대칭키)를 모두 사용하는 방법

SSL 인증방식
  1. 서버의 공개 키를 통하여 클라이언트가 대칭키를 암호화 할 수 있게 한다.
  2. 서버는 암호화된 대칭 키를 개인 키로 복호화 한다.
  3. 암호문으로 통신하는 방법이다.
서버와 클라이언트는 공개 키로 암호화 된 대칭키를 기반으로 통신한다.

SSL 인증 과정

A : 클라이언트, B는 서버라고 가정 했을 경우

 

 

 

클라이언트에서 서버로 접속을 요청

출처 : 스파르타 코딩클럽

 

 


개인키를 가지고있는 서버가 암호화 할 수 있는 공개키를 클라이언트에게 전달

출처 : 스파르타 코딩클럽


클라이언트는 자신의 대칭키를 서버의 공개키로 암호화, 이때 클라이언트가 암호화된 대칭키를 가지게 된다.

출처 : 스파르타 코딩클럽


클라이언트는 서버의 공개키로 암호화한 대칭키를 서버에 전달한다.

출처 : 스파르타 코딩클럽

 


서버는 암호화된 대칭키를 전달받아 자신의 개인키로 복호화 시킨다. 이때 서버도 암호화된 대칭키를 가지게 된다.

출처 : 스파르타 코딩클럽


서버는 복호화된 대칭키 원본을 가지고 클라이언트와 암호문으로 통신한다.

출처 : 스파르타 코딩클럽


 

출처 : 스파르타 코딩클럽

대칭키 방식

서버와 클라이언트가 같은 키를 사용하는방식
암호화 및 복호화에 드는 비용이 적으나 키를 상대방과 함께 사용해야 하기에 전달하기가 쉽지 않다는 단점이 있다.

출처 : 스파르타 코딩클럽


비대칭키 방식

암호화 할 떄 쓰는 키와 복호화 할 때 쓰는 키를 다른것으로 쓰는 방식이다.
암호화 = 공개키 (모두에게 공개한 키)
복호화 = 개인키 (나만 가지고 있는 키)
  • 수학적인 공식으로부터 만들어진 한 쌍의 두 개의 키로 구성되며 하나는 외부에 공개하여 공개키, 하나는 공개하지 않고 개인 키로 사용한다
  • 공개 키로 데이터를 암호화하게 될 시 개인 키로만 복호화가 가능하고 개인 키로 데이터를 암호화하면 공개 키 로만 복호화 할 수 있다.
  • 주로 전자서명과 메세지 송신에 사용된다..
장단점
  • 보안성이 뛰어나다.(장점)
  • 구현하기가 어렵고 암호화 및 복호화 속도가 느리다.(단점)
전자 서명
  • 내 공개 키로 암호화 된 것을 나만 갖고 있는 개인 키로 복호화 함으로 본인이 맞다는 것을 증명한다.
메세지 송신
  • 상대방의 공개 키로 암호화하여 보내면 개인 키를 가지고 있는 상대방만 복호화 할 수 있기에 안전하게 보낼 수 있다.

출처  스파르타 코딩클럽


 

SSL Handshake

대칭키/ 비대칭키 방식을 모두 사용하여 요청/응답 정보를 모두 암호화 하고 외부 인증기관(외부 서버)이 유효한지(신뢰) 보증인 역할을 한다.
TCP/IP 연결 =  3-way Handshake
HTTPS 연결 = SSL Handshake

서비스를 제공하는 서버가 CA로부터 CA인증서를 발급받는다.(인증서 기간 만료까지 1회성)

출처 : 스파르타 코딩클럽


서비스를 제공하는 서버는 CA에 자신의 도메인 정보와 서버 측의 공개 키를 보낸다.

출처 : 스파르타 코딩클럽


인증기관은 받아온 두 데이터를 자신의 개인키로 암호화한 CA인증서를 서버로 보낸다.

출처 : 스파르타 코딩클럽


브라우저에서 도메인주소를 입력하여 요청을 보내 클라이언트(브라우저)와 서버가 TCP 연결을 맺는다.


서버는 브라우저가 보내준 Cipher Suite 중 하나를 선택하여 자신의 SSL/TLS 프로토콜 버전을 브라우저에게 알리며 서버 자신의 도메인에 대한 CA인증서를 보낸다.

출처 : 스파르타 코딩클럽


브라우저는 브라우저에 내장된 CA의 공개 키를 이용하여 CA인증서를 복호화하고 인증서가 유효한지 검증한 후에 서버측의 공개키를 얻는다.

출처 : 스파르타 코딩클럽


브라우저는 앞으로 서버와 통신하는데 있어서 암호화를 위해 사용할 대칭 키를 만들고 그 대칭키를 사이트 공개 키로 암호화 하여 서버로 보낸다.

출처 : 스파르타 코딩클럽


서버는 자신의 개인 키를 사용하여 암호화된 것을 복호화 하여 사용자 대칭 키를 얻어낸다.

출처 : 스파르타 코딩클럽


이렇게 얻은 대칭 키를 활용하여 서버와 클라이언트가 서로 데이터를 안전하게 암/복호화 하면서 통신할 수 있게 된다.

출처 : 스파르타 코딩클럽


이후부터는 계속 암호화하면서 요청을 주고받게 된다.

반응형