Develop Note by J.S.

[Network] HTTPS 본문

Knowledge/Network

[Network] HTTPS

js-web 2023. 6. 26. 09:45
반응형

HTTPSHyperText Transfer Protocal Security 의 약자로 HTTP 에 보안 기능을 더한 웹 네트워크 송수신 프로토콜입니다. 일반적으로 개발을 하다보면 서버에 인증서를 적용하고, https로 서버를 시작하는 것 외에 그 이외의 동작은 웹서버와 브라우저가 알아서 실행시켜주기때문에 정확하게 HTTPS가 정확히 어떤 기능 수행하는지 잘 알지 못했습니다. 그래서 간단하게 제가 이해하고 공부한 만큼 정리를 해보았습니다.

 

기본개념

1. HTTP

- Hypertext Transfer Protocol로 TCP위에서 동작되는 프로토콜이며 웹 브라우저에서 HTML, CSS 등의 리소스를 가져올 수 있게 해주는 프로토콜 입니다. 

2. HTTPS

- http에서 보안기능이 추가된 프로토콜입니다.

3. HTTSP의 필요성 

- HTTP의 경우 API 통신이 이루어질때 데이터가 평문으로 전달 되기 때문에 해당 패킷이 가로채질 경우 개인정보 유출 위험 증가 및 server에서 정상적인 HTTP 요청인지 구분하기 어려워지는 보안적인 문제가 발생하게 됩니다. 그래서 HTTPS는 일반 텍스트로된 정보를 암호화 하고, 서버- 클라이언트의 신뢰성을 보장하게하는 기능을 제공합니다. 

 

HTTPS 절차

HTTPS는 HTTP ->TCP 로 진행되는 계층사이에 TLS(Transport Layer Security)라는 보안 계층이 추가가 됩니다. 
TLS는 TCP의 통신준비를 위한 3 way handshake가 끝나면 TLS Handshake가 시작됩니다. 
아래는 TLS Handshake의 4단계 절차입니다. 

 

TLS Handshake

 1) client에서 server로 random 문자열(client random)과 사용가능한 알고리즘 목록을 전달

 2) server에서 client로 선택한 알고리즘, server가 생성한 random 문자열(server random), 인증서, 공개키를 전달

 3) client는 server의 공개키로 암호화(선택된 알고리즘)한 신규 random 문자열(encrypted client random)을 전달

 4) server는 client에게 handshake 종료 알림 신호 전달

 

이렇게 TLS Handshake가 종료가 되면 Server의 인증과 데이터를 암호화할 준비가 끝났습니다.
인증의 경우 인증서가 유효환지 확인을 합니다. Client는 CA라고 불리는 공신력있는 인증기관의 공개키를 가지고 Server로 부터 받은 인증서를 복호화 해본다면 해당 인증서가 유효한지(Server를 신뢰할 수 있는지)확인한 뒤 인증되지 못한다면 브라우저는 보안 경고페이지를 먼저 노출시킵니다. 


이렇게 인증서까지 모든 준비가 끝났다면 네트워크 통신에서 모든 데이터가 암호화 될 것입니다. 여기서 Server와 Client는 대칭키를 이용해 암/복호화가 진행됩니다.

 

대칭키 생성

Server와 Client가 사용할 대칭키는 TLS Handshake에서 교환한 데이터인 client random, server random, encrypted client random 총 3가지의 문자열로 대칭키를 만듭니다. 이 문자열중 client random과 server random은 평문이 전달되었지만 encrypted client random 문자열은 Client에서 Server의 공개키로 암호화하여 전달되고 Server에서 개인키로 복호화하여 사용하였기 때문에 노출되지 않아서 안전한 대칭키를 만들 수 있습니다. 이렇게 만들어진 대칭키로 데이터를 암호화 하여 네트워크 송수신이 이루어 집니다 .

 

 

데이터 인증

이렇게 대칭키로 데이터 송수신이 이루어 질때 혹, 데이터가 중간에 탈취당하여 변조가 일어났음을 확인하기 위한 MAC(Message Authentication Code)라고 불리는 메시지 인증코드를 함께 보내게 됩니다. MAC은 원본 데이터의 해시값인데요, 수신자는 복호화 한뒤 [데이터 + MAC]에서 데이터를 해시한 결과 값과 MAC을 대조하여 동일한지를 확인하면 변조유무를 알수 있습니다. 

 

 

 

PS. 이렇게 복잡하고 이해하기 어려운 절차로 HTTPS가 동작되고 있지만 실제 개발 시에는 극히 일부의 기능만 컨트롤하고 있었습니다. 모든걸 외우진 못하더라도 이해했다 정도로만 알고 넘어가면 좋을 것 같습니다.

 

참고사이트

https://wookgu.tistory.com/12

https://garantir.io/tls-deployments-for-the-enterprise/

반응형

'Knowledge > Network' 카테고리의 다른 글

[Network] OSI 7계층 & TCP/IP 4계층  (0) 2023.08.08
[Network] HTTP  (0) 2023.07.03
[Network] API Architecture  (0) 2023.06.27
[Network] Socket.io vs Websocket  (0) 2023.06.26