HTTP, HTTPS

지인혁·2023년 9월 24일
0
post-custom-banner


HTTP (HyperText Transfer Protocol)

HTTP는 웹 서버와 클라이언트(보통 웹 브라우저) 간에 정보를 주고 받을 수 있게 해주는 프로토콜이다.

클라이언트가 HTTP 요청을 보내면, 서버가 해당 요청에 따른 결과를 HTTP 응답한다. 하지만, HTTP의 단점은 데이터가 암호화되지 않아서 전송 중인 정보가 제3자에게 쉽게 노출될 수 있다는 것이며, 이것은 중요한 개인정보나 신용카드 정보 등을 전송할 때 문제가 될 수 있다.

HTTPS(HyperText Transfer Protocol Secure)

HTTPS는 기본적으로 HTTP와 같은 방식으로 작동하지만, 추가적으로 SSL/TLS 프로토콜을 사용하여 전송되는 데이터를 암호화한다.

데이터의 안전성과 신뢰성이 향상되며, HTTPS에서 클라이언트와 서버 사이의 모든 통신은 보안 계층(Secure Sockets Layer 혹은 Transport Layer Security)에서 암호화된다.

  1. 내가 사이트에 보내는 정보들을 제 3자가 못 보게 한다.
  2. 접속한 사이트가 믿을 만한 곳인지를 알려준다.

암호화 관련 용어

암호화 : 데이터를 특정 알고리즘을 통해 읽지 못하게 숨기는 것
복호화 : 암호화 된 데이터를 키를 통해 다시 복구 시키는 것
단방향 암호화 : 해시 알고리즘을 이용하여 평문을 복호화 할 수 없는 형태로 암호화한다. 상대도 알면 안되기에 복호화를 불가능하게 하고 비밀번호 등을 저장할 때 자주 사용
양방향 암호화 : 평문을 복호화 할 수 있는 형태로 암호화하는 방법이다. 대칭키(AES), 비대칭키(RSA)로 나뉜다.

대칭키 : 서버와 클라이언트가 암호화 / 복호화에 동일한 비밀키를 사용하는 방식

문제는 동일한 키를 어떻게 양쪽으로 공유하는지가 문제다. 한 번은 한 쪽에서 다른 한쪽으로 키를 보내야하는데 중간에서 누군가 훔친다면 문제가 되며 대칭키의 한계를 보여준다.

비대칭키 : 서버와 클라이언트가 암호와 / 복호화 각각 한 쌍의 다른 두 키를 사용하는 방식

A, B 두 키가 있을때 A키로 암호화하면 B키로만 복호화가 가능하고 B키로 암호화하면 A키로만 복호화가 가능하다.

공개키(Public Key) : 공개적으로 배포되는 키이며 한 번 공개키로 암호화된 메세지는 해당 공개키로 복호화할 수 없고 반드시 짝을 이루는 비밀키로만 복호화가 가능하다.

비밀키 or 개인키(Private Key) : 절대 외부에 노출되서는 안되며 오직 해당 소유자만 보유해야 한다. 소유자의 공개키로 암호화된 데이터만이 이 비밀키로 복호화가 가능하다.

CA(Certificate Authority) : 클라이언트가 접속을 요청한 서버가 의도한 서버가 맞는지 검증해주는 역할을 하는 신뢰성있는 기업들이다. 브라우저 내부에는 기본적으로 CA 목록들이 내장되어있다.

HTTPS 동작 과정

  • 클라이언트가 의도한 서버가 맞는지 handshake

먼저 서버의 공개키를 받아야한다. 서버가 주는 공개키를 통해 데이터를 암호화하고 서버는 자기의 비밀키 통해 암호화된 데이터를 비밀키로 복호화할 수 있기 때문이다.

그 전에 앞서 먼저 클라이언트는 의도한 서버가 맞는지 확인하기 위해 랜덤 데이터를 생성해서 서버에 전송한다.

이걸 받은 서버측도 무작위 데이터, 해당 서버가 CA에서 인증받은 인증서를 응답한다.

  • CA를 통해 검증된 서버의 사이트인지 비대칭키 방식으로 확인

클라이언트는 인증서가 진짜인지 브라우저에 내장된 CA들의 정보로 통해 확인한다.

CA에서 발급받은 인증서들은 CA의 개인키로 암호화 되어 있다. 브라우저에 저장된 CA의 공개키로 인증서가 복호화가 된다면 검증된 서버이고 복호화가 되지 않는다면 검증되지 않은 서버이다.

그렇게 복호화된 인증서에서는 서버의 공개키가 포함되어 있다.

  • 대칭키 방식과 비대칭키 방식이 혼합되어 사용

비대칭키 방식으로만 다량의 데이터를 메세지를 암호와 / 복호화 하는 것은 컴퓨터에 많은 부담을 준다.

먼저 데이터는 대칭키로 암호화를 한다. 하지만 그 대칭키를 서버와 클라이언트가 공유할때 비대칭키를 사용하는 것이다.

맨 처음 서버와 클라이언트에서 주고 받은 무작위 데이터를 혼합하여 임시키를 만든다.임시키는 서버에게 받은 공개키로 암호화되어 서버에 전송한다. 후에 서버는 개인키로 임시키를 복호화 하여 클라이언트와 서버의 동일한 대칭키로 만들어진다.

만들어진 대칭키는 서버와 클라이언트만 서로 알게되어 암호화된 데이터를 자유롭게 공유하게 된다.

profile
대구 사나이
post-custom-banner

0개의 댓글