개발관련 도서/Http&Network Basic

7장 HTTPS

prden 2021. 7. 16. 09:28

1. HTTP의 약점

1) 평문(암호화하지 않은) 통신이기 때문에 도청 가능

HTTP는 자신을 암호화하는 기능이 없기 때문에 통신 전체가 암호화되지 않는다. 즉, 평문으로 HTTP메시지를 보내게 된다. 이를 방지하기 위해 a. 통신 암호화(SSL이나 TLS이라는 다른 프로토콜을 조합해서 HTTP 통신 내용을 암호화할 수 있다.)나 b. 콘텐츠 암호화(콘텐츠 내용 자체를 암호화하는 방법)등을 이용할 수 있다. 

2) 통신 상대를 확인하지 않기 때문에 위장 가능하다. 

HTTP를 사용한 리퀘스트나 리스폰스에서는 통신 상대를 확인하지 않는다. 따라서 누구든지 리퀘스트를 보낼 수 있고 누구든지 리스폰스를 반환할 수 있다. 이를 보완하기 위해 상대를 확인하는 증명서의 기능을 하는 SSL을 활용할 수 있다. SSL은 암호화뿐만 아니라 상대를 확인하는 수단으로 증명서를 제공한다. 이 증명서는 제3 기관에 의해 발행되는 것이기 때문에 위조하는 것이 거의 불가능하다. 

3) 완전성을 증명할 수 없기 때문에 변조 가능

 HTTP가 완전성을 증명할 수 없다는 뜻은 만약 리퀘스트나 리스폰스가 발신된 후에 상대가 수신할 때까지의 사이에 변조되었다고 하더라도 이 사실을 알 수 없다는 것을 의미한다. 

 

2. HTTPS(  HTTP + 암호화 + 인증 + 완전성 보호 = HTTPS)

위와 같은 문제점을 해결하기 위해 HTTP에 암호화나 인증 등의 구조를 더한 것을 HTTPS라고 부른다. 

HTTPS는 통신을 하는 소켓 부분을 SSl(SecureSocketLayer)이나 TLS(Transport LayerSecurity)라는 프로토콜로 대체하고 있다. 

즉, HTTP는 SSL과 통신하고 SSL이 TCP와 통신한다. SSl이라는 껍질을 덮어쓴 HTTP가 HTTPS이다. 

1) 공개 키 암호화 방식

암호화와 복호화에 하나의 키를 같이 사용하는 방식을 공통키 암호라고 부른다. 

공통 키 암호의 딜레마로 나온 것이 두 개의 키를 사용하는 공개키 암호이다. 공개키 암호를 사용한 암호화는 암호를 보내는 측이 상대의 공개키를 사용해 암호화한다. 그리고 암호화된 정보를 받아들인 상대는 자신의 비밀키를 사용해 복호화를 실시한다. 

 

2) HTTP는 하이브리드 암호 시스템

공개키 암호는 공통 키 암호에 비해 처리 속도가 늦다. HTTP는 공개키와 공통 키 암호의 양쪽 장점을 살릴 수 있도록 각각의 방식을 조합해서 통신한다. 키를 교환하는 곳에서는 공개키 암호를 사용하고 그 후의 통신에서 메시지를 교환하는 곳에서는 공통 키 암호를 사용한다. 

 

3) 공개키가 정확한지 아닌지 증명하는 증명서

어떤 서버와 공개키 암호를 사용해서 통신을 하려고 할 때 공개키가 본래 의도한 서버에서 발행한 공개키인지 확신할 수가 없다. 이를 위해 제3기 관인 인증기관을 이용해 안전성을 확보한다. (공개키 인증서)

HTTPS에서는 클라이언트 증명서도 이용할 수 있다. 클라이언트 증명서를 이용해 서버 증명서와 같이 통신하고 있는 상대가 의도한 클라이언트인 것을 증명하는 클라이언트 인증을 할 수 있다. 그러나 비용상의 이유로 은행 인터넷 뱅킹과 같은 곳에서만 사용된다. 

 

3. 항상 HTTPS를 사용하지 않는이유?

SSL 통신이 지연되는 이유에는 두 가지가 있다. 하나는 통신 속도가 떨어지는 것과 다른 하나는 CPU나 메모리 등의 리소스를 다량으로 소비하며 처리가 느려지는 것이다. 네트워크 부하는 HTTP를 사용하는 경우에 비해 2배에서 100배 정도 느려질 수 있다. TCP 접속과 HTTP 리퀘스트, 리스폰스 이외에 SSL에 필요한 통신이 추가되어 처리해야 할 통신이 증가하기 때문이다. 

즉, 항상 HTTPS를 사용하지 않는 이유는 암호화 통신은 CPU와 메모리 등 리소스를 많이 필요로 하기 때문이다. 특히 액세스가 많은 웹 사이트 등에서 암호화를 하면 그 부하가 상당하기 때문에 암호화를 사용하는 경우에는 모든 콘텐츠를 암호화하는 것이 아니라 숨겨야 할 정보만 암호화하면서 리소스를 절약한다. 추가적으로 HTTPS를 사용하기 위해서 증명서가 필요하지만, 이를 사용하기 위해서 구매해야 한다. 이 비용 또한 상당하기 때문에 HTTP만 선택하는 경우도 있다.