본문 바로가기
CS/네트워크

HTTP & HTTPS(SSL, 하이브리드 암호화)

by 쌩욱 2021. 11. 28.

HTTP(HyperText Transfer Protocol)

  • 인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약
  • TCP/IP 기반으로 서버와 클라이언트 간의 요청과 응답을 전송한다.
  • 비연결 지향
    • 브라우저를 통해 사용자의 요청으로 서버와 접속하여 요청에 대한 응답의 데이터를 전송후, 연결을 종료한다.
    • 간단하기 때문에 자원이 적게드는 장점이 있다.
    • 하지만, 연결이 지속적이지 않기 때문에 사용자와 연결 종료후 추가적인 요청시 어떤 사용자의 요청인지 모른다는 점이 존재한다.
    • 즉, 여러 사용자가 요청할 시 각각의 사용자 요청을 구분할 수 없어서 제대로 된 응답 데이터를 전송할 수 없다는 단점이 있다.
    • 해결 방법으로는 쿠키, 세션, 히든 폼 필드 등이 있다.
  • 단방향성
    • 사용자의 요청 한 개에 대해 한 개의 응답을 하는 방식이기 때문에 서버가 먼저 응답하지 않는다.

단점

  • HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다.
  • HTTP는 평문 통신이기 때문에 도청이 가능하다.
    • TCP/IP 구조의 통신은 전부 통신 경로 상에서 엿볼 수 있다.
  • 통신 상대를 확인하지 않기 때문에 위장이 가능하다.
    • HTTP 에 의한 통신에는 상대가 누구인지 확인하는 처리는 없기 때문에 누구든지 리퀘스트를 보낼 수 있다.
    • IP 주소나 포트 등에서 그 웹 서버에 액세스 제한이 없는 경우 리퀘스트가 오면 상대가 누구든지 무언가의 리스폰스를 반환한다.
      • 리스폰스를 반환한 곳의 클라이언트가 원래 의도한 리퀘스트를 보낸 클라이언트인지를 확인할 수 없다.
      • 통신하고 있는 상대가 접근이 허가된 상대인지를 확인할 수 없다.
      • 어디에서 누가 리퀘스트 했는지 확인할 수 없다.
  • 완전성을 증명할 수 없기 때문에 변조가 가능하다.
    • 여기서 완전성이란 정보의 정확성 을 의미한다.
    • 서버 또는 클라이언트에서 수신한 내용이 송신측에서 보낸 내용과 일치한다라는 것을 보장할 수 없는 것이다.
    • 리퀘스트나 리스폰스가 발신된 후에 상대가 수신하는 사이에 누군가에 의해 변조되더라도 이 사실을 알 수 없다.
  • 이런 보안 문제를 해결해주는 프로토콜이 HTTPS이다.

 

HTTPS(HyperText Transfer Protocol Secure)

    • 인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약
    • HTTP 에 암호화와 인증, 그리고 안전성 보호를 더한 HTTPS
    • HTTP 통신하는 소켓 부분을 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer)라는 프로토콜로 대체한 것이다.
    • HTTP는 TCP와 통신했지만, HTTPS에서 HTTP는 SSL과 통신하고 SSL이 TCP와 통신하게 된다.
    • HTTPS 의 SSL 에서는 대칭키 암호화 방식공개키 암호화 방식을 혼합한 하이브리드 암호 시스템을 사용한다. 대칭키를 공개키 암호화 방식으로 교환한 다음에 다음부터의 통신은 대칭키 암호를 사용하는 방식이다.
      • 대칭키 암호
        • 하나의 비밀키를 양쪽(client & server)가 모두 같이 사용
        • 암호화와 복호화에 사용하는 키가 같은 암호화 알고리즘
        • 공개키와 비밀키를 별도로 가지는 것과 구별되는데, 이와 비교하면 계산속도가 빠르다는 장점
      • 공개키 암호
        • 비밀키 하나 만 가지는 대칭키 암호 방법과 달리, 공개키와 비밀키 두 개가 존재
        • 암호화와 복호화에 사용하는 키가 서로 다름
        • 공개키는 누구나 알 수 있지만, 그에 대응하는 비밀키는 키의 소유자만이 알 수 있어서 특정한 비밀키를 가지는 사용자만이 내용을 열어볼 수 있도록 하는 방식.
        • 암호화할 때의 키는 공개키(public key), 복호화할 때의 키는 개인키(private key)

      • 하이브리드 암호 시스템
        • 공개키 암호의 처리속도가 느린 것을 대칭키 암호로 해결하고, 대칭키 암호의 키 배송 보안 문제를 공개키 암호로 해결한다.
        • 메시지는 대칭키 암호로 암호화
        • 대칭키 암호의 암호화에서 사용한 세션키는 의사난수생성기로 생성
        • 대칭키는 공개키 암호로 암호화

 

모든 웹 페이지에서 HTTPS를 사용해도 될까?

 평문 통신에 비해서 암호화 통신은 CPU나 메모리 등 리소스를 더 많이 요구한다. 통신할 때마다 암호화를 하면 추가적인 리소스를 소비하기 때문에 서버 한 대당 처리할 수 있는 리퀘스트의 수가 상대적으로 줄어들게 된다.

 

 하지만 최근에는 하드웨어의 발달로 인해 HTTPS를 사용하더라도 속도 저하가 거의 일어나지 않으며, 새로운 표준인 HTTP 2.0을 함께 이용한다면 오히려 HTTPS가 HTTP보다 더 빠르게 동작한다. 따라서 웹은 과거의 민감한 정보를 다룰 때만 HTTPS에 의한 암호화 통신을 사용하는 방식에서 현재 모든 웹 페이지에서 HTTPS를 적용하는 방향으로 바뀌어가고 있다.

 

참고

https://gaeko-security-hack.tistory.com/123

'CS > 네트워크' 카테고리의 다른 글

CORS (Cross-Origin Resource Sharing)란 무엇일까?  (0) 2022.01.14
HTTP 메서드 GET vs POST  (0) 2021.11.30
TCP 와 UDP  (0) 2021.11.24