HTTP 와 HTTPS

shorry·2022년 7월 14일
0

Frontend

목록 보기
4/8

📌HTTP


  • Hyper Text Transfer Protocol 의 줄임말
  • 서버와 클라이언트간에 데이터를 주고 받는 프로토콜. (일종의 통신규약)
  • 텍스트, 이미지, 영상, JSON 등등 거의 모든 형태의 데이터를 전송할 수 있다.

✔️HTTP의 보안 이슈

  • 클라이언트와 서버간의 통신에 있어서 별다른 보안 조치가 없기때문에 만약 누군가 네트워크 신호를 가로챈다면 HTTP의 내용은 그대로 외부에 노출이 된다.
  • 고객의 개인정보나 비밀을 취급하는 대규모 서비스라면 큰 보안적 허점이 될 것이다.
  • 이러한 문제를 해결하기 위해 등장한 것이 HTTPS 이다.

📌HTTPS


  • 거의 대부분의 주소창에 보이는 자물쇠 표시는 HTTPS가 적용되었다는걸 알려주는 것이다.
  • 처음에는 전자상거래 등 고객의 중요정보를 다루는 사이트 위주로만 사용되었고, 보편화되어있지는 않았다.
  • 그러다 2014년 구글에서 HTTPS로 변환하라고 권고하기 시작하였고, https를 적용하는 사이트들에게 SEO에 있어서 가산점을 주겠다고 하면서 보편화가 되기 시작했다.

✔️그렇다면 어떤 방식으로 보안 이슈를 해결하는가?

  • 기존의 HTTP 프로토콜은 전송계층의 TCP위에서 동작한다.
  • HTTPS는 전송계층 위에 SSL이라는 보안계층이 올라가고, 그 위에 HTTP를 얹어서 보안이 보장된 통신을 하는 프로토콜이다.
  • 이 통신 방식을 SSL 암호화 통신 이라고 한다.
  • SSL 암호화 통신은 공개키 암호화 방식 이라는 알고리즘을 통해 구현된다.

공개키 암호화 방식

  • 공개키와 개인키 두 종류의 키가 존재한다.
  • 한쪽 키로 데이터를 암호화 했다면 오직 다른쪽 키로만 복호화 할 수 있다.
  • 그 중에서 하나 키는 모두에게 공개하는 공개키(1번 키)로 만들어서 공개키 저장소에 등록해놓는다.
  • 서버는 서버만 알 수 있는 개인키(2번 키)를 소유하고 있으면 된다.
  • 그러면 1번키로 암호화된 http 요청, 즉 HTTPS 프로토콜을 사용한 요청이 온다면 서버는 개인키(2번 키)를 이용하여 1번키로 암호화된 문장을 해독하게 된다.
  • 서버는 요청이 무엇인지 알게되고 요청에 맞는 응답을 다시 개인키(2번 키)로 암호화해서 요청한 클라이언트에게 보내주게 된다.
  • 응답을 받은 클라이언트는 공개키(1번 키)를 이용해서 개인키(2번 키)로 암호화된 HTTPS 응답을 해독하고 사용한다.
  • 공개키는 누구나 얻을 수 있고 공개키를 알면 서버가 주는 데이터를 알 수 있어서 보안상의 큰 의미는 없다.
  • 대신 공개키로 해독이 가능했으니까 반드시 해당 서버의 개인키로 암호화 했다는것을 보장하므로 해당 서버로부터 온 응답임을 확신할 수 있다.

✔️클라이언트와 서버간의 요청과 응답 과정

CA는 서버 운영 기업이 넘겨준 공개키를 인증서 발급자, CA의 이름 등과 함께 묶어서 CA가 가지고 있는 개인키로 암호화해서 SSL인증서로 발급 받는다.

차후에 클라이언트에서 요청을 하면 서버는 클라이언트에게 SSL 인증서를 보낸다.

브라우저(클라이언트)는 대표적인 CA들의 리스트와 그들의 공개키를 보유하고 있다.

만약 인증서에 적힌 CA의 이름과 브라우저가 소유하고 있는 CA 이름이 같다면 CA의 공개키로 SSL 인증서를 복호화 한다.

이제 SSL내부에 들어있던 서버의 공개키를 가지고 요청을 암호화해서 서버에게 보낸다.

서버측은 가지고 있는 개인키로 요청을 복호화하여 해석하고 응답은 다시 암호화 해서 보낸다.

이 과정을 통해 보안성이 강한 통신을 할 수 있게 됩니다.

📌Reference


https://jeong-pro.tistory.com/89
https://devjem.tistory.com/3

profile
I'm SHORRY about that

0개의 댓글