본문 바로가기
Web

[Web] HTTPS(HyperText Transfer Protocol over Secure Socket Layer)

by 기몬식 2023. 10. 26.

HTTPS

출처

HTTPS는 인터넷을 통해 정보를 안전하게 전송하기 위한 통신 프로토콜입니다.
HTTP의 보안 버전으로 웹 브라우징 및 데이터 전송 과정에서 데이터 기밀성과 무결성을 보장하는 프로토콜입니다.
전송 과정에서 무결성 검사 기술을 사용하여 데이터가 변조되었는지 확인하고 변경된 데이터를 자동으로 거부합니다.
즉 HTTPS는 클라이언트가 웹 사이트와 통신할 때 민감한 데이터를 전송하는 경우 해당 데이터가 중간에서 수정되거나 탈취되지 않도록 보장합니다.

HTTP는 평문을 이용하여 웹 통신을 진행합니다.
암호화 되지 않은 데이터는 스누핑(Snooping), 스니핑(Sniffing)의 위협에 노출될 수 있으며 이를 방지하기 위해 상호간 적당한 사용자인지 인증서를 통해 검증하고 서로 약속한 암호화 알고리즘을 통해 키를 교환한 후 암호화 통신을 진행합니다.

이를 위해 HTTPS를 사용하며 HTTPS는 웹 통신을 암호화 하기 위해 SSL/TLS 프로토콜을 사용하여 데이터를 암호화하고 신원을 확인합니다.
SSL/TLS는 HTTPS에서 사용되는 표준 프로토콜이며 SSL(Secure Socket Layer)의 최신 버전을 TLS(Transport Layer Security)로 부르지만 본질적으로 두 프로토콜은 동일합니다.

SSL/TLS는 공개 키와 개인 키가 있는 비대칭 키 암호화라는 기술을 사용합니다.
공개 키와 개인 키로 이루어진 키 쌍이며 데이터를 암호화하는 공개 키는 공개적으로 공유되고 데이터를 복호화하는 개인 키는 비밀로 유지됩니다.
누구나 데이터를 암호화할 수 있지만 해당 데이터를 해독할 수 있는 사람은 개인 키를 소유한 당사자 또는 기관뿐입니다.
때문에 개인 키는 안전한 저장소에 보관되어야 하며 이를 통해 데이터의 기밀성 및 무결성을 동시에 보호할 수 있습니다.

공개 키는 서버의 웹사이트의 공개 키 정보가 있는 SSL 인증서를 통해 클라이언트 장치와 공유되며 인증서는 CA(Certificate Authority)에 의해 암호화되어 서명되며 각 브라우저에는 암시적으로 신뢰하는 CA 목록이 있습니다.

암호화

기본적으로 데이터를 암호화하기 위해서는 세 가지가 필요합니다.

  1. 암호화 대상 데이터
  2. 고유한 암호화 키
  3. 암호화 알고리즘

데이터를 암호하고 보호하기 위해 암호화 대상 데이터, 고유한 암호화 키, 그리고 암호화 알고리즘 이 세 가지의 요소를 조합합니다.
다음은 위 세 가지 요소를 조합하여 암호화하는 대칭 암호화와 비대칭 암호화에 대해 알아보겠습니다.

대칭 암호화

출처

먼저 대칭 암호화는 암호화 및 복호화에 동일한 암호 키를 사용하는 암호화 방법입니다.
송신자는 데이터를 암호화하려고 할 때 암호 키를 사용합니다. 이 암호 키를 통해 데이터를 평문에서 암호문으로 변환합니다.
그 후 암호화된 데이터(암호문)는 수신자에게 전송되고 수신자는 송신자가 사용한 암호 키를 통해 복호화하며 평문으로 복구합니다.

대칭 암호화는 계산적으로 간단하며 빠르기 때문에 대량의 데이터를 신속하게 효율적으로 암호화하고 복호화할 수 있지만 대칭 암호화 자체는 연결의 반대쪽 끝을 제어할 수 없다는 치명적인 단점이 있습니다.
해당 문제를 해결하기 위해 비대칭 암호화 기술이 등장합니다.

비대칭 암호화

출처

비대칭 암호화는 두 개의 별도 키로 동일한 데이터를 암호화하고 복호화합니다.
공개 키와 개인 키로 이루어진 키 쌍이며 데이터를 암호화하는 공개 키는 공개적으로 공유되고 데이터를 복호화하는 개인 키는 비밀로 유지됩니다.
누구나 데이터를 암호화할 수 있지만 해당 데이터를 해독할 수 있는 사람은 개인 키를 소유한 당사자 또는 기관뿐입니다.
즉 공개 키는 데이터 암호화에 사용되며 개인 키로만 해독할 수 있습니다.

송신자는 수신자의 공개 키를 사용하여 데이터를 암호화합니다.
암호화된 데이터는 수신자에게 전송되고 수신자는 개인 키를 사용하여 암호문을 평문으로 복호화합니다.

HTTPS 작동 방식

출처

  1. 먼저 클라이언트는 웹 사이트 서버에 접속하여 연결을 요청합니다.
  2. 클라이언트가 서버에게 연결을 요청하면 서버는 클라이언트에게 서버에 대칭키를 보내줍니다.
  3. 브라우저는 세션 키라는 세 번째 키를 생성합니다.
  4. 세션 키는 서버에서 얻은 공개 키를 사용하여 컴퓨터에서 암호화됩니다.
  5. 그 후 암호화된 세션 키가 서버와 공유됩니다.
  6. 서버는 비밀 개인 키를 사용하여 클라이언트로부터 받은 세션 키를 해독합니다. 이제 양쪽 끝에 컴퓨터가 생성한 세션 키가 있습니다.
  7. 공개키 암호화는 종료되고 대칭암호로 대체됩니다.
  8. 이제 대칭 암호화만 사용하여 서버 세션에 있으며 웹 사이트를 떠날 때까지 이러한 상태가 유지됩니다.

공개 키(비대칭) 암호화는 나머지 연결에 사용되는 세 번째 키를 교환하기 위해 처음에만 간략하게 사용됩니다.
이렇게 handshaking이 종료되며 브라우저와 서버가 같은 키를 가지고 있으므로 더이상 비대칭키(공개 키)로 암호화를 할 필요 없이 세션 키를 통해 대칭 키 방식으로 동작하게 됩니다.
즉 HTTPS는 handshaking 과정에서 비대칭 키를 사용해 인증서(대칭 키)를 보내고 해당 인증서의 대칭 키를 안전하게 받았다면 연결 이후에는 해당 대칭 키(세션 키)를 사용해서 데이터를 암호화하고 해독합니다.

오탈자 및 오류 내용을 댓글 또는 메일로 알려주시면, 검토 후 조치하겠습니다.

'Web' 카테고리의 다른 글

[Web] 로드밸런서(Load Balancer)  (0) 2023.08.31
[Web] HTTP(Hyper Text Transfer Protocol)  (0) 2023.08.24
[Web] REST  (0) 2023.08.09
[Web] JWT & Session & Cookie  (0) 2023.07.15