http & https

Oh Joon·2020년 12월 4일
0

Roadmap Internet

목록 보기
3/6
post-thumbnail

기본 개념

HTTP의 개념

HTTP(Hypertext Transfer Protocol)의 약자로 서로 다른 시스템들 사이에서 통신을 주고받게 해주는 가장 기초적인 프로토콜이다. 웹 서핑을 할 때 서버에서 브라우저로 데이터를 전송해 주는 용도로 가장 많이 사용된다. 인터넷의 초기에 모든 웹사이트에서 기본적으로 사용되었던 프로토콜이다.

특징

1. 비-연결 지향(Connectionless)

클라이언트가 서버에게 리소스를 요청한 후 응답을 받으면 연결을 끊어버리는 특징이다. 연결을 유지하게 되면 서버에 많은 부담을 줄 수 있기 때문에 상당히 많은 클라이언트에게 요청을 받는 웹 서버의 경우 응답을 처리했으면 연결을 끊는다. 이로 인해 서버의 부담을 줄일 수 있지만, 리소스를 요청할 때마다 연결해야 하는 오버헤드 비용이 발생한다. 이를 해결하기 위해선, 요청 헤더의 Connection: keep-alive 속성으로 지속적 연결 상태(Persistent connection)를 유지할 수 있다. 즉, 요청을 할 때마다 연결하지 않고 기존의 연결을 재사용하는 방식이다. HTTP 1.1 부턴 지속적 연결 상태가 기본이며 이를 해제하기 위해선 명시적으로 요청 헤더를 수정해야 한다.

2. 무상태성(Stateless)

각각의 요청이 독립적으로 여겨지는 특징으로, 서버는 클라이언트의 상태를 유지하지 않는다. 즉, 각 클라이언트에 맞게 리소스를 응답하는 것은 불가능하다. 이를 해결하기 위해, 쿠키나 세션 또는 토큰 방식의 OAuth 및 JWT가 사용된다.

HTTPS의 개념과 장점

HTTPS는 (Hypertext Transfer Protocol Secure)의 약자이다. 일반 HTTP 프로토콜의 문제점은 서버에서부터 브라우저로 전송되는 정보가 암호화되지 않았다. 즉, 데이터가 쉽게 도난당할 수 있었다. HTTPS 프로토콜은 SSL(Secure Socket Layer)을 사용함으로써 문제를 해결하였다. 또한 검색엔진 최적화(SEO)에 있어서도 큰 혜택을 볼 수 있다.

SSL은 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버 브라우저가 민감한 정보를 주고받을 때 이것이 도난당하는 것을 막아준다.

SSL 3.0 버전부터는 IETF에서 표준으로 정해서 TLS 1.0이 되었다. 하지만 아직도 그냥 SSL이라고 더 많이 불린다. TCP의 연결이 이루어진 후 TLS를 통해 암호화 설정이 되고 통신을 하는 방식이다.

  • TCP란 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 규약(프로토콜)의 일종

SSL 인증서와 TLS

SSL 인증서는 사용자가 사이트에 제공하는 정보를 암호화하는데, 데이터를 암호로 바꾼다고 생각하면 된다. 이렇게 전송된 데이터는 중간에서 누군가 훔쳐 낸다고 하더라도 데이터가 암호화되어있기 때문에 해독할 수 없다. 특히 신용카드 정보나 비밀번호 등 사용자들의 민감한 정보들을 다루는 웹사이트라면 더욱 SSL 인증서같은 보안 기능은 필요하다.

SSL 3.0 버전부터는 IETF에서 표준으로 정해서 TLS 1.0이 되었다. 하지만 아직도 그냥 SSL이라고 더 많이 불리는것 같습니다.

TSL은 데이터 무결성을 제공하기 때문에 데이터가 전송 중에 수정되거나 손상되는 것을 방지하고, 사용자가 자신이 의도하는 웹사이트와 통신하고 있음을 입증하는 인증 기능도 제공한다.

필요한 개념

1.공개키(Public Key)와 비밀키(Private Key) : 공개키는 모두가 볼 수 있는 키이며 비밀키는 소유자만이 가지고 있는 키로 암/복호화에 사용된다.

  1. 대칭키 암호화 : 서버와 클라이언트가 암호화/복호화에 동일한 비밀키를 사용하는 방식(즉, 암호화를 할 때 1234라는 값을 사용했다면 복호화할 때 1234라는 값을 입력해야 한다.)키를 공유하는데 어려움이 있으나 속도가 빠르다. 하나의 키로 암호화와 복호화를 모두 하는 암호화 방식이다.

  2. 비대칭키 암호화 : 서버와 클라이언트가 암호화/복호화에 각각 다른 비밀키를 사용하는 방식, 공개키를 통해서 암호화를 하고 비밀키를 통해서 복호화를 한다. 공개키는 공개해도 상관없으니 키 관리에 어려움이 없으나, 속도가 느리다.

A,B 두 개의 키가 있다면 A키로 암호화 하면 B키로 복호화 할 수 있고, B키로 암호화 하면 A키로 복호화 할 수 있다.

  1. 인증기관(Certificate Authority, CA) :클라이언트가 접속을 요청한 서버가 의도한 서버가 맞는지 인증해주는 역할을 하는 보증된 기업들이다. 클라이언트는 서버에 요청을 해서 CA가 발급한 인증서를 받은 뒤 CA의 공개키로 복호화하여 신뢰할 만한 인증서인지 검증한다. CA의 공개키로 복호화되는 암호화는 오직 CA의 비밀키로 암호화한 경우밖에 없기 때문에 복호화되면 신뢰할 만한 것이다.
  • 암호화 : 암호를 만드는 행위

  • 복호화 : 함호를 푸는 행위

동작방식

HTTPS 통신에서 실제 전송되는 데이터의 암호화에는 대칭키 암호화 방식을 사용하고, 키 교환에는 비대칭키 암호화를 사용한다.

  1. 클라이언트가 서버에게 접속요청을 하면 서버는 CA에서 발급받은 인증서를 보낸다. 인증서에는 CA의 비밀키로 암호화된 사이트정보와 공개키가 들어있다.

  2. 클라이언트는 인증서를 받아 CA의 공개키로 복호화하여 접속요청한 서버가 신뢰할만한지 검증한다.

  3. 복호화가 되면 인증서가 신뢰할 만하기 때문에 데이터를 주고받을 대칭키를 생성한다.

  4. 대칭키를 서버의 공개키로 암호화하여 서버에게 전송한다.

  5. 서버는 자신의 비밀키로 클라이언트가 보낸 대칭키를 복호화한 뒤 그 대칭키를 통해 데이터를 주고받는다.

profile
Front-end developer

0개의 댓글