사실 최근에 기업 1차 면접을 준비하면서 공부하고 노션에 정리해놨던 FE 기술을 복기하면서 velog에 다시 정리 중이다! 역시 복기만큼 나를 겸손하게 하는 건 없는 것 같다 ^.^•••
HTTP(HyperText Transfer Protocol)는 웹 상에서 클라이언트와 서버 간에 데이터를 주고 받는 데 사용되는 통신 규약이다.
클라이언트가 서버에 요청을 보내고, 서버가 이에 대한 응답을 반환하는 방식으로 동작한다. HTTP는 비연결성(stateless)
을 특징으로 하여, 한 번의 요청-응답이 끝나면 연결이 종료된다. 또한 통신이 안전하게 연결될 수 있도록 TCP 연결을 사용한다.
HTTP는 HTML, JSON 등 다양한 포맷의 데이터를 전달할 수 있다. 요청과 응답에는 URL 경로, 각종 메서드, 상태 코드와 헤더 등 정해진 몇 가지 정보를 포함한다.
HTTP의 보안을 강화한 HTTPS(HyperText Transfer Protocol Secure)는 HTTP에 TLS/SSL 프로토콜에 따라 데이터를 암호화하여 전송한다. 이를 통해 보안 상 중요한 정보들을 안전하게 보호해 통신을 주고 받는다.
HTTP의 문제점 ⚠️
위 세 가지는 다른 암호화하지 않은 프로토콜에도 공통되는 문제점들이다❗️
1️⃣ TCP/IP는 도청 가능한 네트워크이다
TCP/IP 구조의 통신은 전부 통신 경로 상에서 엿볼 수 있다. 패킷을 수집하는 것만으로도 도청할 수 있다. 평문으로 통신을 할 경우 메시지의 의미를 파악할 수 있기 때문에, 암호화하여 통신해야 한다.
보완 방법은? 🤔
SSL(Secure Socket Layer)
or TLS(Transport Layer Security)
라는 다른 프로토콜을 조합함으로써, HTTP의 통신 내용을 암호화할 수 있다. SSL을 조합한 HTTP를 HTTPS(HTTP Secure)
or HTTP over SSL
이라고 부른다. 2️⃣ 통신 상대를 확인하지 않기 때문에 위장이 가능하다.
HTTP에 의한 통신에는 상대가 누구인지 확인하는 처리는 없기 때문에, 누구든지 리퀘스트를 보낼 수 있다. IP 주소나 포트 등에서 그 웹 서버에 액세스 제한이 없는 경우, 리퀘스트가 오면 상대가 누구든지 무언가의 리스펀스를 반환한다. 이러한 특징은 여러 문제점을 유발한다.
보완 방법은? 🤔
위 암호화 방법으로 언급된 SSL
로 상대를 확인할 수 있다.
SSL은 상대를 확인하는 수단으로 증명서
를 제공하고 있다. 증명서는 신뢰할 수 있는 제3자 기관에 의해 발행되는 것이기 때문에, 서버나 클라이언트가 실재하는 사실을 증명한다. 이 증명서를 이용함으로써, 통신 상대가 내가 통신하고자 하는 서버임을 나타내고, 이용자는 개인 정보 누설 등의 위험성이 줄어들게 된다.
한 가지 이점을 더 꼽자면, 클라이언트는 이 증명서로 본인 확인을 하고 웹 사이트 인증에서도 이용할 수 있다.
3️⃣ 완전성을 증명할 수 없기 때문에 변조가 가능하다.
여기서 완전성이란 정보의 정확성을 의미한다. 서버 또는 클라이언트에서 수신한 내용이 송신 측에서 보낸 내용과 일치한다는 것을 보장할 수 없다는 것이다.
리퀘스트나 리스펀스가 발신된 후, 상대가 수신하는 사이에 누군가에 의해 변조되더라도 이 사실을 알 수 없다. 이와 같이 공격자가 도중에 리퀘스트나 리스펀스를 빼앗아 변조하는 공격을 중간자 공격(Man-in-the-Middle)이라고 부른다.
보완 방법은? 🤔
MD5, SHA-1 등의 해시 값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 존재하지만, 확실히 확인할 수 있는 것은 아니다. 이를 확실히 방지하기에는 HTTPS를 사용해야 한다. SSL에는 인증이나 암호화, 그리고 다이제스트 기능을 제공하고 있다.
HTTP에 암호화와 인증, 그리고 완전성 보호를 더한 HTTPS
HTTPS
는 SSL의 껍질을 덮어쓴 HTTP라고 할 수 있다. 즉 HTTPS는 새로운 애플리케이션 계층의 프로토콜이 아니라는 것이다. HTTP 통신하는 소켓 부분을 SSL(Secure Socket Layer)
or TLS(Transport Layer Security)
라는 프로토콜로 대체하는 것 뿐이다.
HTTP는 원래 TCP와 직접 통신했지만, HTTPS
에서 HTTP는 SSL과 통신하고, SSL이 TCP와 통신하게 된다. SSL을 사용한 HTTPS
는 암호화와 증명서, 안전성 보호를 이용할 수 있게 된다.
HTTPS
의 SSL에서는 공통키 암호화 방식과 공개키 암호화 방식을 혼합한 하이브리드 암호 시스템을 사용한다. 초기 연결 시, 클라이언트가 서버의 공개키로 공통키를 암호화해서 전송하면, 서버는 개인키로 이것을 복호화해서 공통키를 얻을 수 있다. 이후 연결에서는 속도가 빠른 공통키 암호화 방식을 사용해서 데이터를 주고 받는다.
🤔 공개키 암호화 방식과 공통키(대칭키) 암호화 방식은❓
🔺 단점
대칭키 암호화 방식의 키 전달의 취약점을 해결하기 위해 나온 방식.
서로 다른 두 개의 키를 사용한다.
공개키
: 누구나 볼 수 있다.개인키
: 본인만 가지고 있는다.공개키로 암호화한 것은 개인키로만 복호화할 수 있다.
진행 과정
🔺 단점
➡️ 대칭키 암호화의 장점과 공개키 암호화의 장점을 채택해, 용량이 큰 정보는 대칭키로 암호화하고, 암호화에 사용된 대칭키는 공개키로 암호화하여 전달하는 하이브리드 암호화 방법이 일반적으로 사용되고 있다.
🤔 모든 웹페이지에서 HTTPS를 사용해도 될까?
평문 통신에 비해 암호화 통신은 CPU나 메모리 등 리소스를 더 많이 요구한다. 통신할 때마다 암호화를 하면 추가적인 리소스를 소비하기 때문에, 서버 한 대당 처리할 수 있는 리퀘스트의 수가 상대적으로 줄어들게 된다.
하지만 최근에는 하드웨어의 발달로 인해 HTTPS를 사용하더라도 속도 저하가 거의 일어나지 않으며, 새로운 표준인 HTTP 2.0을 함께 이용한다면 오히려 HTTPS가 HTTP보다 더 빠르게 동작하게 된다.
따라서 웹은 과거의 민감한 정보를 다룰 때만 HTTPS에 의한 암호화 통신을 사용하는 방식에서, 현재 모든 웹 페이지에서 HTTPS를 적용하는 방향으로 바뀌어가고 있다.