일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 부트캠프항해
- 자바스크립트
- 항해99추천
- db수정
- 탐욕알고리즘
- 알고리즘
- 숫자를 별점으로
- 프로그래머스
- 카테고리필터
- 서버 컴포넌트
- 그리디
- server component
- 항해99후기
- NextJS v13
- 실전프로젝트
- 항해99
- 중복카테고리
- 클라이언트 컴포넌트
- 항해99솔직후기
- 백준
- 동전 0
- 배열 중복 제거
- 로딩 후 실행
- jQuery
- 날씨 api
- JavaScript
- 배열 메소드
- 중복선택
- greedy
- react
- Today
- Total
공부 및 일상기록
[네트워크] HTTPS의 동작 방식 본문
HTTPS는 HTTP를 SSL(Secure socket layer) 프로토콜 위에서 돌아가도록 하여 클라이언트와 서버가 주고받는 텍스트를 암호화 한다. 즉 HTTPS는 HTTP + SSL 인것이다. HTTPS를 사용하면 통신 내용이 공격자에게 공격받는 것을 방지할 수 있고 클라이언트는 접속하려는 서버가 신뢰할 수 있는 서버인지 판단할 수도 있다.
SSL프로토콜
SSL프로토콜은 SSL인증서를 사용해 작동한다. SSL인증서는 클라이언트와 서버간의 통신을 제 3자가 보증해주는 전자화된 문서이다. 클라이언트가 서버에 접속하면 서버는 클라이언트에게 이 인증서 정보를 전달한다. 클라이언트는 먼저 이 인증서의 정보가 신뢰할 수 있는지 확인 하고나서 작업을 수행한다.
SSL인증서
SSL인증서에는 서비스의 정보(인증서를 발급한 CA, 서비스의 도메인 등)와 서버의 공개키가 포함되어 있다. 이 내용은 제 3자인 CA(Certificate autority : 공개키를 저장해주는 신뢰성이 검증된 민간 기업)에 의해 암호화 된다. 이 때 공개키 암호화 기법이 사용되는데 특이하게 CA의 비공개키로 암호화가 진행된다. 이는 브라우저가 보유한 검증된 CA공개키에 의해 복호화가 가능하다.
브라우저가 보유한 CA기업의 공개키로 복호화가 가능하다는 것은 그 데이터가 공개키와 쌍을 이루는 비공개키를 통해 암호화 되었음을 인증하는 것과 같다. 즉 해당 데이터가 CA기업으로부터 왔음이 증명되는 것이다.
위 과정을 거치면 사이트는 신뢰할 수 있으므로 해당 공개키를 활용해 서버와 소통하며 대칭키인 "세션키"를 생성하고 이를 활용해 통신을 진행한다.
SSL vs TLS
SSL은 TLS(transport layer security)라는 또 다른 프로토콜의 이전 버전이다.
그래서 사실 TLS암호화, TLS handshake라고 부르는 것이 바람직하지만 SSL의 인지도가 워낙 높아서 그냥 SSL로 부르거나 TLS/SSL암호화, TLS/SSL handshake와 같은 방식으로 부른다.
제품군에 따라 유형이 다르지만 대부분 비슷한 RSA 키교환 알고리즘을 사용하므로 그걸 기준으로 아래 그림을 보자
- client hello : 클라이언트가 서버로 hello 메세지를 전송하면서 핸드세이크를 시작한다. 이 메세지는 클라이언트가 지원하는 TLS(SSL)버전, 지원되는 암호 제품군, 그리고 client random 이라고 하는 무작위 바이트 문자열이 포함된다.
- server hello : 클라이언트 hello 메세지에 대한 응답으로 서버가 서버의 SSL인증서, 서버에서 선택한 암호 제품군, 그리고 서버에서 생성한 또 다른 무작위 바이트 문자열인 "server random"을 포함하는 메세지를 전송한다.
- Verify server certificate : 클라이언트가 서버의 SSL 인증서를 인증서 발행 기관(CA)을 통해 검증한다. 이를 통해 서버가 인증서에 명시된 서버인지, 클라이언트가 상호작용 중인 서버가 실제 해당 도메인의 소유자인지를 확인한다.
- Client key exchange : 확인이 완료되면 클라이언트는 "The premaster secret"라고 하는 무작위 바이트 문자열을 공개키로 암호화 하여 전송한다. (클라이언트는 서버의 SSL 인증서에 공개키를 받는다.)
- Send client certificate : 만약 서버가 클라이언트의 인증서를 요구한다면 서버의 인증서와 같은 방식으로 암호화를 진행하여 함께 전송한다.
- Verify client certificate : 서버가 클라이언트로부터 받은 The premaster secret을 개인키를 통해 해독한다.
- Client "finished" : 클라이언트가 "client random", "server random", "the premaster secret"을 이용해 대칭키로 활용할 "세션키"를 생성한다. 클라이언트가 세션 키로 암호화된 "finished" 메세지를 전송한다.
- Server "finished" : 서버가 "client random", "server random", "the premaster secret"을 이용해 대칭키로 활용할 "세션키"를 생성한다. 서버가 세션키로 암호화된 "finished"메세지를 전송한다.
- Exchange message : 핸드셰이크가 완료되고 세션키를 이용해 메세지를 주고받는다.
https 동작 방식은?
- A라는 서버를 만드는 기업이 HTTPS를 적용하기 위해 공개키와 개인키를 만듭니다.
- 신뢰할 수 있는 CA 기업에 공개키 관리를 부탁하며 계약을 맺습니다.
- 계약이 완료된 CA 기업은 A 서버의 공개키, 해당 기업의 이름, 공개키 암호화 방법을 담은 인증서를 만들고 해당 인증서를 CA 기업의 개인키로 암호화해서 A 서버에게 제공합니다.
- A 서버는 직접적인 공개키가 아닌 암호화된 인증서를 보유하게 되었습니다.
- 클라이언트가 통신 요청을 보내면 앞선 SSL/TLS Handshake 과정을 수행하여 연결을 수립합니다.
- 클라이언트와 A 서버와 통신을 시작합니다.
https://inuplace.tistory.com/1086
[Network] HTTPS의 동작방식
안녕하세요 이누입니다!🐶 일반적인 브라우저는 HTTPS가 아닌 HTTP만으로 구성된 사이트에 접속하려하면 경고 메세지를 띄웁니다. 해당 사이트가 신뢰할 수 있는 사이트가 아닐 수 있기 때문입니
inuplace.tistory.com
'개발 > 네트워크' 카테고리의 다른 글
[네트워크] TCP 3 Way HandShaking (0) | 2023.01.09 |
---|---|
[네트워크] TCP와 UDP (0) | 2023.01.09 |
[네트워크] HTTP의 상태 코드 (status code) (0) | 2023.01.09 |
[네트워크] http의 GET, POST 비교 (0) | 2023.01.09 |
[네트워크] http와 https 의 차이점 (0) | 2023.01.09 |