[Web] HTTP와 HTTPS 차이점
1. HTTP란?
앞서 포스팅에서 작성했듯이 HTTP는 서버와 클라이언트가 데이터를 주고 받는 프로토콜이다. HTTP프로토콜은 별다른 보안 조치가 없이 데이터를 주고받기 때문에 제3자에 의해 데이터를 탈취당할 위험이 크다.
2023.04.28 - [Web] - [Web] HTTP 통신
[Web] HTTP 통신
1. HTTP란? HTTP(Hypertext Transfer Protocol)는 클라이언트(web browser)와 서버(web server)간의 통신을 위한 규약 또는 프로토콜(protocol)이다. 사용자 브라우저가 웹서버에 HTTP 요청을 전송하고 서버는 HTTP 응답
hamster801.tistory.com
2. HTTPS란?
HTTPS(Hypertext Transfer Protocol Secure)는 이름에서도 알 수 있듯이 기존의 HTTP에서 Secure(보안)을 강화환 프로토콜이다. 데이터를 암호화해서 주고받는다. HTTPS 프로토콜은 SSL(보안 소켓 계층)을 이용해서 HTTP의 보안상 문제를 해결했으며 SSL은 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고 서버 브라우저가 민감한 정보를 주고 받을 때도 도난 당하는 것을 막아준다. HTTPS가 암호화를 하는 방법은 대칭키 암호화 방식과 비대칭키 암호화 방식을 함께 사용한다.
2-1. 대칭키 암호화 방식(symmetric-key algorithm)
대칭키 암호화방식이란 하나의 키(key)로 평문을 암호화하고, 다시 암호문을 원래의 평문으로 복호화할 때 사용하는 방식이다. 암호화와 복호화를 하나의 키로 사용하기 때문에 이 키가 노출될 경우 암호문을 제3자가 복호화하여 볼 수 있으므로 보안이 취약하다.
- 장점: 단순한 구조로 CPU를 적게 쓰고 빠르다.
- 단점: 공통 키를 빼앗기면 복호화를 할 수 있으므로 보안에 취약하다는 단점이 있다.
2-2. 비대칭키 암호화 방식 = 공개키 암호화 방식(Public Key Cryptography)
비대칭키 암호화 방식은 공개키, 개인키 이렇게 두개의 키를 한쌍으로 각각 암호화/복호화에 사용한다. 일반적으로 공개키를 암호화한 것을 개인키로 복호화환다. 개인키를 먼저 만들고 여기서 공개키를 파생하여 한 쌍의 키를 만들기 때문에 같은 쌍의 키가 아닌 다른키로 암호화/복호화는 불가능하다.
- 공개티 : 모두에게 공개가능한 키
- 개인키: 나만 가지고 알고 있어야 하는 키
- 장점: 키 전송과정 중 빼앗겨도(해킹 당해도) 빼앗은 자(해커)가 해독을 할 수 없으니 공통 키 방식보다 보다 안전합니다.
- 단점: 공통 키 방식보다 느리고 리소스 소비가 큽니다.
2-3. HTTPS가 대칭키와 비대칭키를 사용해 통신하는 과정
1. 클라이언트(브라우저)가 서버로 최초 연결 시도를 함
2. 서버는 공개키(엄밀히는 인증서)를 브라우저에게 넘겨줌
3. 브라우저는 인증서의 유효성을 검사하고 세션키(대칭키)를 발급함
4. 브라우저는 세션키를 보관하며 추가로 서버의 공개키로 세션키를 암호화하여 서버로 전송함
5. 서버는 개인키로 암호화된 세션키를 복호화하여 세션키를 얻음
6. 클라이언트와 서버는 동일한 세션키를 공유하므로 데이터를 전달할 때 세션키로 암호화/복호화를 진행함
2-4. 서버에서 공개키를 발급받는 방법
클라이언트가 서버에 요청을 보내면 서버에서는 비대칭키를 생성하여 클라이언트에게 공개키를 넘겨준다. 이 과정에서 서버는 어떻게 공개키(인증서)를 발급받을까?
1. 서버에서 공개키와 개인키를 쌍으로 생성한다.
2. 서버에서 '인증 서명 요청서(CSR)'를 만든다.
3. CA에 '인증 서명 요청서'를 보내면 CA가 인증 서명요청서에 CA의 개인키를 통해 전사서명을 한 형태인 SSL 인증서를 발급한다.
4. 서버는 CA로부터 암호화된 SSL인증서를 받는다.
** CA란?
인증서의 역할은 클라이언트가 접속한 서버가 클라이언트가 의도한 서버가 맞는지를 보장하는 역할을 한다. 이 역할을 하는 민간기업들을 CA(Certificate authority)라고 한다. CA는 아무기업이나 할 수 있는 것이 아니고 신뢰성이 엄격하게 공인된 기업들만이 참여할 수 있다. SSL을 통해서 암호화된 통신을 제공하려면 CA를 통해서 인증서를 구입해야한다.
3. HTTP와 HTTPS
HTTP는 암호화 과정이 없기 때문에 보안에 취약한 반면, HTTPS는 안전하게 데이터를 주고받을 수 있다. 하지만 HTTPS를 사용하면 암호화/복호화 과정이 필요하기때문에 HTTP보다 속도가 느리다. 그리고 HTTPS는 인증서를 발급하고 유지하기 위한 비용도 발생한다.
이러한 장점과 단점이 모두 존재하기 때문에 개인정보와 같은 민감한 정보를 주고 받아야 할 땐 HTTPS를 사용하고, 노출이 되어도 괜찮은 단순한 정보만을 제공하려면 HTTP를 이용하면 된다.