Backend:: HTTPS 란??

jahlee·2023년 10월 12일

Backend공부

목록 보기
10/18

HTTPS 란??

HTTP + TLS => HTTPS !!

하이퍼텍스트 전송 프로토콜 보안(HTTPS)은 웹 브라우저와 웹 사이트 간에 데이터를 전송하는 데 사용되는 기본 프로토콜인 HTTP의 보안 버전이다. HTTPS는 데이터 전송의 보안을 강화하기 위해 암호화된다. 이는 사용자가 은행 계좌, 이메일 서비스, 의료 보험 공급자에 로그인하는 등 중요한 데이터를 전송할 때 특히 중요하다.
모든 웹 사이트, 특히 로그인 자격 증명이 필요한 웹 사이트는 HTTPS를 사용해야 한다. 크롬 등 최신 웹 브라우저에서는 HTTPS를 사용하지 않는 웹 사이트가 HTTPS를 사용하는 웹 사이트와 다르게 표시된다.

HTTPS 작동 과정

HTTPS는 암호화 프로토콜을 사용하여 통신을 암호화한다. 이 프로토콜은 이전에는 보안 소켓 계층(SSL)으로 알려졌지만, 전송 계층 보안(TLS)이라고 불린다. 이 프로토콜은 비대칭 공개 키 인프라로 알려진 것을 사용하여 통신을 보호합한다. 이 유형의 보안 시스템에서는 두 개의 서로 다른 키를 사용하여 두 당사자 간의 통신을 암호화한다.

  • 개인 키

    이 키는 웹 사이트 소유자가 관리하며, 독자께서 짐작할 수 있듯이 비공개로 유지됩니다. 이 키는 웹 서버에 있으며 공개 키로 암호화된 정보를 해독하는 데 사용됩니다.
  • 공개 키

    이 키는 안전한 방식으로 서버와 상호 작용하고자 하는 모든 사람이 사용할 수 있습니다. 공개 키로 암호화된 정보는 개인 키로만 해독할 수 있습니다.

클라이언트가 서버에 데이터를 보낼 때는 공개키로 암호화하지만, 반대의 경우에는 서버가 클라이언트에 데이터를 보낼 때는 세션 키를 사용한다. 세션 키는 클라이언트와 서버가 암호화된 통신을 시작하기 전에 협의하여 생성하는 키이다. 클라이언트와 서버는 모두 세션 키를 공유하고, 이 키를 사용하여 데이터를 암호화하고 복호화한다. 세션 키는 클라이언트와 서버가 통신하는 동안만 유효하기 때문에 통신이 끝나면 세션 키는 삭제된다.

TLS/SSL 란 ??

TLS

전송 계층 보안(TLS)은 인터넷 상의 커뮤니케이션을 위한 개인 정보와 데이터 보안을 용이하게 하기 위해 설계되어 널리 채택된 보안 프로토콜이다. TLS의 주요 사용 사례는 웹 사이트를 로드하는 웹 브라우저와 같이 웹 응용 프로그램과 서버 간의 커뮤니케이션을 암호화하는 것이다. TLS는 또한 이메일, 메시지, 보이스오버 IP(VoIP) 등 다른 커뮤니케이션을 암호화하기 위해 사용된다.

SSL

Netscape가 개발한 SSL(Secure Sockets Layer)이라고 불리는 이전의 암호화 프로토콜에서 발전한 것이 TLS이다. TLS 버전 1.0은 SSL 버전 3.1로서 개발을 시작했지만 Netscape와 더 이상 연관이 없음을 명시하기 위해 발표 전에 프로토콜의 이름이 변경된것이다.

TLS 핸드셰이크 란 ??

TLS 핸드셰이크는 TLS 암호화를 사용하는 통신 세션을 실행하는 프로세스이다. TLS 핸드셰이크 중에, 통신하는 양측에서는 메시지를 교환하여 서로를 인식하고 서로를 검증하며 사용할 암호화 알고리즘을 구성하고 세션 키에 합의한다.

TLS 핸드셰이크는 사용자가 HTTPS를 통해 웹 사이트를 탐색하고 브라우저가 처음 해당 웹 사이트의 원본 서버를 쿼리하기 시작할 때마다 발생한다. 다른 통신이 API 호출 및 HTTPS를 통한 DNS 쿼리를 포함하는 HTTPS를 사용할 때에도 매번 TLS 핸드셰이크가 발생한다.

TLS 핸드셰이크는 TCP 연결이 TCP 핸드셰이크를 통해 열린 후에 발생합니다.

진행 과정

  1. '클라이언트 헬로' 메시지: 클라이언트가 서버로 "헬로" 메시지를 전송하면서 핸드셰이크를 개시한다. 이 메시지에는 클라이언트가 지원하는 TLS 버전, 지원되는 암호 제품군, 그리고 "클라이언트 무작위"라고 하는 무작위 바이트 문자열이 포함된다.
  2. '서버 헬로' 메시지: 클라이언트 헬로 메시지에 대한 응답으로 서버가 서버의 SSL 인증서, 서버에서 선택한 암호 제품군, 그리고 서버에서 생성한 또 다른 무작위 바이트 문자열인 "서버 무작위"를 포함하는 메시지를 전송한다.
  3. 인증: 클라이언트가 서버의 SSL 인증서를 인증서 발행 기관을 통해 검증한다. 이를 통해 서버가 인증서에 명시된 서버인지, 그리고 클라이언트가 상호작용 중인 서버가 실제 해당 도메인의 소유자인지를 확인한다.
  4. 예비 마스터 암호: 클라이언트가 "예비 마스터 암호"라고 하는 무작위 바이트 문자열을 하나 더 전송한다. 예비 마스터 암호는 공개 키로 암호화되어 있으며, 서버가 개인 키로만 해독할 수 있다. (클라이언트는 서버의 SSL 인증서를 통해 공개 키를 받는다.)
  5. 개인 키 사용: 서버가 예비 마스터 암호를 해독한다.
  6. 세션 키 생성: 클라이언트와 서버가 모두 클라이언트 무작위, 서버 무작위, 예비 마스터 암호를 이용해 세션 키를 생성한다. 모두 같은 결과가 나와야 한다.
  7. 클라이언트 준비 완료: 클라이언트가 세션 키로 암호화된 "완료" 메시지를 전송한다.
  8. 서버 준비 완료: 서버가 세션 키로 암호화된 "완료" 메시지를 전송한다.
  9. 안전한 대칭 암호화 성공: 핸드셰이크가 완료되고, 세션 키를 이용해 통신이 계속 진행된다.

HTTP 와 무엇이 다른가??

엄밀히 말하면 HTTPS는 HTTP와 별개의 프로토콜이 아니다. HTTPS는 단순히 HTTP 프로토콜을 통해 TLS/SSL 암호화를 사용하는 것이다. HTTPS는 특정 공급자가 주장하는 실체가 맞는지 확인하는 TLS/SSL 인증서의 전송을 기반으로 이루어진다.
사용자가 웹 페이지에 연결하면 웹 페이지에서 보안 세션을 시작하는 데 필요한 공개키가 포함된 SSL 인증서를 전송한다. 그런 다음 두 컴퓨터, 즉 클라이언트와 서버가 보안 연결을 설정하는 데 사용되는 일련의 주고받는 통신인 SSL/TLS 핸드셰이크라는 프로세스를 거친다.

참조

https://www.cloudflare.com/ko-kr/learning/ssl/what-is-https/

0개의 댓글