티스토리 뷰
웹은 안전한 통신을 위해 정보를 암호화한다. 암호화란 일반적인 평문을 알아볼 수 없도록 암호화하여 암호문으로 만드는 과정이다. 개인 정보가 담긴 평문을 암호화하고, 이렇게 만들어진 암호문을 상대방에게 전달하면, 상대방은 이를 다시 복호화하여 원래의 평문으로 열람할 수 있다.
이와 같은 과정을 웹 브라우저와 웹 서버에 사용하는 대표적인 기술이 바로 HTTPS(Hypertext Transfer Protocol Secure)이다. 인터넷 컨텐츠를 전달하는 TCP 프로토콜의 일종인 HTTP에 S(Secure) 기능을 추가한 것이다.
HTTPS의 원천 기술로는 SSL 과 TLS 전송 기술이 있다.
- SSL(Secure Socket Layer) // 통상적으로 SSL 인증서라고 부르며 TLS도 포함
- TLS(Transport Layer Security) // SSL의 개선 버전
안전한 계층(Layer)를 웹 통신에 추가하는 방식이다. 이 기술을 수행하기 위해 웹 서버에 설치하는 것이 SSL/TLS 인증서이다. TLS는 SSL의 개선버전으로, 최신 인증서는 대부분 TLS로 사용하지만, 편의적으로 SSL 인증서라고 말한다.
웹 브라우저는 공신력있는 인증서의 정보를 브라우저 내부에 보관하고 있으며, 접속하는 웹 사이트에 믿을만한 인증서가 설치되어 있는 지 확인한다.
HTTPS는 안전한 데이터의 전달이 브라우저와 웹 서버 사이의 전달 구간에서 이루어지기 때문에, 보안 채널(secure channel), 전송 보안(secure transit)이라고 부르기도 한다.
SSL 인증서와 SSL 핸드 셰이크에 탑재된 기술
SSL 인증서관련 프로세스에는 여러가지 보안 기술이 탑재되어 있다.
암호화, 인증, 서명, 공개키, 무결성 확인 등 매우 다양하다.
대표적인 암호화 방식 두 개를 살펴보면 1)대칭키 암호화 방식과 2)공개키 암호화 방식이 있다.
- 대칭키 암호화 방식: 키를 단 하나(하나의 암호화 키 사용)만 사용하는 간편함 제공, 하지만 키를 분실하거나 도난 당했을 시 누군가 내 정보를 복호화해서 볼 수 있음
- 공개키 암호화 방식: 공개키, 개인키 두 개의 키를 한 쌍(키 페어)으로 각각 암호화/복호화에 사용한다. 일반적으로 공개키로 암호화하고 개인키로 복호화한다. 생성 순서는 개인키 -(파생)-> 공개키 이며 다른 쌍을 사용하면 암호화/복호화가 불가능하다. 대칭키에 비해 안전하다는 장점이있지만 계산 과정이 복잡하고 연산 도중 컴퓨터의 자원을 많이 사용하는 단점이 있음
SSL 핸드셰이크 과정
1. 클라이언트: 클라이언트에 해당하는 브라우저가 먼저 웹 서버에 접속한다.
웹 사이트 접속에 HTTPS를 사용하는 브라우저는 위의 정보를 client hello 단계에서 보낸다.
- 위의 그림에서 나와있는 정보 외에 아래의 내용 추가
- 만약 이전에 SSL 핸드 셰이크가 완료된 상태라면, 그때 생성된 세션 아이디(session ID)
2. 서버: 웹서버는 1번에 응답하면서 아래 정보를 클라이언트에 제공한다. (server hello 단계)
- 서버의 공개키가 담긴 SSL인증서. 인증서는 CA의 비밀키로 암호화되어 발급된 상태이다.
- 클라이언트 인증서 요청(선택사항)
3. 클라이언트: 브라우저는 서버의 SSL 인증서가 올바른지 확인한다.
- 대부분 브라우저에는 공신력있는 CA들의 정보와 CA가 만든 공개키가 이미 설치되어 있다. 내장된 CA공개키로 암호화된 인증서를 복호화하고 정상적으로 복호화된다면 CA가 발급한 것이 증명된다. 이 과정에서 오류가 난다면 브라우저 경고를 보낸다.
4. 클라이언트: 브라우저는 자신이 생성한 난수와 서버의 난수를 사용하여 premaaster secret을 만든다.
- 웹 서버 인증서에 딸려온 웹 사이트의 공개키로 이것을 암호화하여 서버로 전송한다.
5. 서버: 서버는 사이트의 비밀키로, 브라우저가 보낸 premaster secret 값을 복호화한다.
- 복호화한 값을 master secret 값으로 저장한다. 이것을 사용하여 방금 브라우저와 만들어진 연결에 고유한 값을 부여하기 위한 세션키를 생성한다. 세션 키는 대칭키 암호화에 사용할 키이다. 이것으로 브라우저와 서버 사이에 주고받는 데이터를 암호화하고 복호화한다.
6. 서버 and 클라이언트: SSL 핸드셰이크를 종료하고 HTTPS 통신을 시작한다.
- 브라우저와 서버는 SSL 핸드셰이크가 정상적으로 완료되었따. 이제는 웹 상에서 데이터를 세션키를 사용해 암호화/복호화하며, https 프로토콜을 통해 주고받을 수 있다. https 통신이 완료되는 시점에서 서로에게 공유된 세션 키를 폐기한다. 만약 세션이 아직 유지되고 있다면 브라우저는 SSL핸드셰이크 요청이 아닌 세션 ID만 서버에게 알려주면 된다.
- SSL 인증서에는 대칭키 방식과 공개키 방식 두 개 모두 사용하며, 모든 웹 콘텐츠의 전달을 공개키 방식으로 한다면 웹 서버와 브라우저에 많은 부담이 된다. -> SSL 핸드셰이크 단계까지는 공개키 방식, 그 이후의 HTTPS 통신은 대칭키 방식을 사용한다.
all ref: https://yozm.wishket.com/magazine/detail/1852/
'프로그래밍 > CS 지식' 카테고리의 다른 글
[프로그래밍 언어 활용 | 정처기 실기] C 언어, 표준함수와 포인터 (0) | 2023.06.19 |
---|---|
Authentication(인증) vs Authorization(인가, 권한부여) with JWT (0) | 2023.05.14 |
[Network | HTTP] HTTP(http 메서드, 공통/응답/요청/캐시 헤더) (0) | 2023.03.28 |
[Network] TCP 송/수신 원리 (1) | 2022.12.11 |
[Browser] 웹 브라우저 동작 원리에 대해서(reflow & repaint) (0) | 2022.10.30 |
- Total
- Today
- Yesterday
- 타입스크립트 DT
- 부트캠프항해
- 틸드와 캐럿
- 형제 요소 선택자
- ~ ^
- aspect-ratio
- nvm경로 오류
- 타입스크립트 장점
- 항해99프론트
- 항해99프론트후기
- getServerSideProps
- 원티드 프리온보딩 프론트엔드 챌린지 3일차
- 프리온보딩 프론트엔드 챌린지 3월
- getStaticPaths
- Prittier
- nvm 설치순서
- D 플래그
- 프리렌더링확인법
- 원티드 프리온보딩 FE 챌린지
- is()
- && 셸 명령어
- tilde caret
- float 레이아웃
- 항해99추천비추천
- 원티드 3월 프론트엔드 챌린지
- text input pattern
- fs모듈 넥스트
- grid flex
- 원티드 FE 프리온보딩 챌린지
- reactAPI
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |