HTTP

[HTTP] 암호화와 HTTPS

날아 2023. 1. 31. 03:23
HTTP의 문제점 
  • HTTP는 암호화되어있지 않다. 따라서 누군가가 서버-클라이언트 간의 http 메시지를 볼 수 있다. 
  • 즉, 보안에 취약하다. 

1. HTTPS - Hypertext Transfer Protocol Secure

  • SSL/TSL를 이용한 HTTP 통신
  • SSL(Secure Socket Layer) : 전송되는 데이터를 암호화
  • 현재는 TSL(Transport Layer Security)로 발전되어 두 단어를 혼용해서 사용한다. 
  • 클라이언트가 서버에 보내는 정보들을 암호화하기 때문에 보안에 유리하다.
  • 클라이언트는 접속한 사이트가 신뢰할만한 사이트인지 알 수 있다. 

 

1-1. 암호화 기본 개념 

  • 공개키(Public Key)와 비밀키(Private Key) : 공개키는 모두가 볼 수 있는 키이며 비밀키는 소유자만이 가지고 있는 키로 암/복호화에 사용된다.
  • 대칭키 암호화 : 서버와 클라이언트가 암/복호화에 동일한 비밀키를 사용하는 방식. ex) 같은 해독문을 가지고 있는 셈이다. 
    • 동일한 키를 양쪽이 공유하는 것은 쉽지 않다. 한 쪽에서 한 번은 반대쪽으로 비밀키를 전송해야 하는데, 중간에서 해커들이 가로챌 위험이 있다. 다만 속도가 빠르다.
  • 비대칭키 암호화(공개키 암호화) : 서버와 클라이언트가 암/복호화에 각각 다른 비밀키를 사용하는 방식. 공개키를 통해서 암호화를 하고 개인키를 통해서 복호화를 한다. 
    • ex) 네이버 서버는 두 키중 하나는 자신만이 비밀로 보관하고(개인키) 나머지 한 키는 대중들에게 누구나 볼 수 있도록 공개한다.(공개 키)
  • 인증기관(Certificate Authority, CA) : 클라이언트가 접속을 요청한 서버가 의도한 서버가 맞는지 인증해주는 역할을 하는 보증된 기업들이다. 클라이언트는 서버에 요청을 해서 CA가 발급한 인증서를 받은 뒤 CA의 공개키로 복호화하여 신뢰할 만한 인증서인지 검증한다. CA의 공개키로 복호화되는 자료는 오직 CA의 비밀키로 암호화한 경우밖에 없기 때문에 복호화되면 신뢰할 만한 것이다.

1. HTTPS 동작방식

  1. 클라이언트는 어떤 랜덤 데이터1를 생성해서 서버에 보낸다.
  2. 서버는 답변으로 서버측에서 생성한 랜덤데이터2 + 인증서를 보낸다. 
  3. 클라이언트는 인증서의 진위여부를 판단하기 위해 브라우저에 내장된 CA의 공개키로 인증서를 복호화한다. (비대칭키 시스템) CA의 인증을 받은 인증서들은 해당 CA의 개인키로 암호화가 되어있다. 
  4. 복호화된 인증서 안에는 서버의 공개키가 포함되어있다.  
  5. 랜덤데이터1과 랜덤데이터2를 조합하여 대칭키로 사용할 것인데 이는 탈취당하면 안되기 때문에 인증서에 들어있던 공개키로 암호화하여 서버에 전송한다. 
  6. 서버는 가지고 있는 개인키를 이용해 복호화하여 클라이언트가 보낸 대칭키를 얻는다. 
  7. 그 이후 대칭키를 이용해 데이터를 주고 받는다.
  8. 세션이 종료되면 대칭키를 폐기한다.

 

왜 6-7번에서 대칭키를 이용해 데이터를 주고받는가?

비대칭키의 방식으로 데이트를 암/복호화 하는것은 대칭키로 할 때보다 훨씬 많이 컴퓨터에 과부화를 준다. 사이트를 이용하며 주고받는 대규모의 데이터들을 일일히 비대칭키 방식으로 암/복호화 하는 것은 무리다. 따라서 대칭키로 암호화를 한다. 

 

 

 

출저

https://www.youtube.com/watch?v=H6lpFRpyl14 

https://velog.io/@gotaek/HTTPS%EB%9E%80