본문 바로가기
💻CS/네트워크

[WEB/이론] 웹 브라우저에 https://www.naver.com을 입력하면 일어나는 일 / SSL, TLS, OSI 7계층, DNS, HT

by Dong Ik 2023. 4. 1.

요약

  1. 웹 브라우저가 호스트명을 추출 후 DNS(애플리케이션 계층)에 IP 주소를 물어본다 (DNS query)
  2. 해당 주소와 TCP 연결 후 SSL/TLS 연결
  3. HTTP 메시지 생성 후 SSL/TLS 암호화, TCP 포트번호(전송 계층)와 IP 주소(네트워크 계층)를 추가
  4. 랜카드(물리 계층)를 통해 전송, 이 때 스위치(데이터 링크 계층)와 라우터(네트워크 계층)를 통해 목적지로 메시지가 전달
  5. 통신이 끝난 후 4-way handshake을 통해 연결을 종료

 
 
지난 게시글에 네트워크 보안 수업을 들으면서 공부했던 내용을 더 추가했다

과정 설명

1) 웹 브라우저에 주소를 입력한다

웹 브라우저는 URL에서 도메인을 추출한다
https://www.naver.com -> www.naver.com  
 
도메인만 가지고는 어느 곳에서 데이터를 가져와야 하는지 알 수 없다
따라서 DNS에 도메인을 전송하고 IP주소를 받아온다
 
 

2) TCP 연결

TCP는 연결지향성 프로토콜이다
따라서 클라이언트와 서버 간의 연결을 해야 통신을 할 수 있다
 
이 때 사용되는 방법은 3 HandShaking이다
 

 
 

3) SSL/TCL 연결

아까 입력한 주소는 http://가 아닌 https://로 시작한다
http 프로토콜은 암호화하지 않고 데이터를 보내지만 https 프로토콜은 인증을 하는 절차가 있기 때문에 보안이 뛰어나다
(또한 구글 검색 순위에 영향을 미치기 때문에 자신이 만든 웹 사이트를 서비스 할 때 SEO 측면에서도 좋다)
 
다음은 연결하는 과정이다
우선 CA(Certificate Authority)라는 것이 등장한다
CA는 인증서를 발급하는 공인된 제 3자 기관이다
SSL/TLS를 위한 인증서를 발급하며 관리해 인터넷 상의 보안을 유지하는 역할을 한다
 
클라이언트는 CA에서 CA의 공개키를 받아오며
서버는 (사이트 정보 + 사이트 공개키)를 CA에게 보낸 후, 이를 CA가 개인키로 암호화 한 SSL 인증서를 받아온 상태에서 시작한다
 
 

  1. 클라이언트는 서버에게 TLS 버전 + 암호화 알고리즘 + 랜덤데이터 을 보낸다
  2. 서버는 TLS 버전을 확인하고 클라이언트가 준 암호화 알고리즘 중 하나를 선택한다
  3. 서버는 CA에서 받아온 SSL 인증서 + 랜덤데이터를 클라이언트에게 보낸다
  4. 클라이언트는 인증서를 CA에서 받아온 공개키로 복호화 한다 (복호화가 됐다는 것은 서버가 보낸 데이터가 인증 됐다는 의미)
  5. 클라이언트는 클라이언트의 랜덤데이터 + 서버의 랜덤데이터를 통해 pre master secret이라는 값을 생성한다
  6. 클라이언트는 pre master secret을 인증서 안에 들어있던 서버의 공개키로 암호화 후 서버로 보내며 서버는 서버의 개인키로 복호화한다
  7. 자, 그러면 클라이언트와 서버는 서로 pre master secret이라는 값을 안전하게 주고 받았다!!!!!
  8. 이 값을 통해 master secret값으로 만들고 이를 통해 session key를 생성해 안전한 대칭키로 이용하며 앞으로 통신할 때 데이터를 대칭키로 암호화, 복호화 해서 이용한다

 
 

4) HTTP 통신 시작

자, 이제 연결도 잘 됐고 보안 문제도 어느정도 해결됐다
그럼 이제 HTTP 프로토콜을 이용해 서버와 클라이언트간의 통신을 시작한다
 
 

  1. HTTP(애플리케이션 계층) 메시지를 생성한다
  2. 아까 생성한 대칭키를 통해 SSL/TLS 암호화를 한다 (애플리케이션 계층과 전송 계층 사이)
  3. 암호화된 데이터에 TCP 포트번호(전송 계층)와 IP 주소(네트워크 계층)를 추가한다
  4. 랜카드(물리 계층)를 통해 전송되며, 이 때 스위치(데이터 링크 계층, L3 스위치를 쓸 경우 라우터 기능까지 포함)와 라우터(네트워크 계층)를 통해 서버로 메시지가 전달한다

 
 
 

5) 통신 종료

통신이 끝난 후 4-way handshake을 통해 연결을 종료한다
 
 
 

참고

 

핸드셰이킹 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 핸드셰이크는 본래 악수를 뜻합니다. 핸드셰이킹(handshaking), 주고받기[1]는 정보기술과 전기통신 및 관련 분야에서 채널에 대한 정상적인 통신이 시작되기 전에

ko.wikipedia.org

 

HTTPS와 SSL 인증서 - 생활코딩

HTTPS VS HTTP HTTP는 Hypertext Transfer Protocol의 약자다. 즉 Hypertext 인 HTML을 전송하기 위한 통신규약을 의미한다. HTTPS에서 마지막의 S는 Over Secure Socket Layer의 약자로 Secure라는 말을 통해서 알 수 있듯이

opentutorials.org