HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재한다. → 해당 보안 문제를 해결해주는 프로토콜이 HTTPS이다.
TCP/IP 구조의 통신은 통신 경로 상에서 엿볼 수 있다. 패킷을 수집하는 것만으로 도청할 수 있다. 평문으로 통신을 할 경우 메시지의 의미를 파악할 수 있기 때문에 암호화하여 통신을 해야한다.
SSL(Secure Socket Layer)
or TLS(Transport Layer Security)
라는 다른 프토토콜을 조합하여 HTTP의 통신 내용을 암호화할 수 있다. SSL을 조합한 HTTP를 HTTPS
or HTTP over SSL
이라고 칭한다.HTTP 통신은 상대가 누구인지 확인하는 처리가 없기 때문에 누구든지 요청을 보낼 수 있다.
IP주소나 포트 등에서 해당 웹 서버에 접근 제한이 없는 경우 요청이 오면 상대가 누구든지 무언가의 응답을 반환한다. 이러한 특징은 여러 문제점을 유발한다.
SSL
을 사용하여 상대를 확인할 수 있다. SSL
은 상대를 확인하는 수단으로 증명서를 제공하고 있다. 증명서는 신뢰할 수 있는 제 3 자 기관에 의해 발행되는 것이기 때문에 서버나 클라이언트가 실재하는 사실을 증명한다. 이 증명서를 이용함으로써 통신 상대가 내가 통신하고자 하는 서버임을 나타내고 이용자는 개인 정보 누설 등의 위험성이 줄어들게 된다. 한 가지 이점을 더 꼽자면 클라이언트는 이 증명서로 본인 확인을 하고 웹 사이트 인증에서도 이용할 수 있다.
여기서 완전성이란 정보의 정확성 을 의미한다. 변조가 가능하다는 것은, 서버 또는 클라이언트에서 수신한 내용이 송신측에서 보낸 내용과 일치한다라는 것을 보장할 수 없는 것이다. 요청이나 응답이 발신된 후에 상대가 수신하는 사이에 누군가에 의해 변조되더라도 이 사실을 알 수 없다. 이와 같이 공격자가 도중에 요청이나 응답을 빼앗아 변조하는 공격을 중간자 공격(Man-in-the-Middle)
이라고 부른다.
MD5
, SHA-1
등의 해시 값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 존재하지만 확실히 확인할 수 있는 것은 아니다. 확실히 방지하기에는 HTTPS를 사용해야 한다.
SSL
에는 인증이나 암호화, 그리고 다이제스트 기능을 제공하고 있다
HTTPS는 암호화와 인증, 완정성 보호를 가지며, 공개키 암호화 방식으로 텍스트를 암호화한다.
SSL
or TLS
프로토콜로 대체하는 것이다.평문 통신에 비해서 암호화 통신은 CPU나 메모리 등 리소스를 더 많이 요구한다. 통신할 때마다 암호화를 하면 추가적인 리소스를 소비하기 때문에 서버 한 대당 처리할 수 있는 리퀘스트의 수가 상대적으로 줄어들게 된다.
하지만 최근에는 하드웨어의 발달로 인해 HTTPS를 사용하더라도 속도 저하가 거의 일어나지 않으며, 새로운 표준인 HTTP 2.0을 함께 이용한다면 오히려 HTTPS가 HTTP보다 더 빠르게 동작한다. 따라서 웹은 과거의 민감한 정보를 다룰 때만 HTTPS에 의한 암호화 통신을 사용하는 방식에서 현재 모든 웹 페이지에서 HTTPS를 적용하는 방향으로 바뀌어가고 있다.
CA란? : Certificate Authority로, 공개키를 저장해주는 신뢰성이 검증된 민간기업
main.html
파일을 달라고 서버A에 요청했다고 가정하자. HTTPS 요청이 아니기 때문에 CA기업이 서버A의 정보를 CA 기업의 개인키로 암호화한 인증서를 받게 된다.CA 기업의 공개키는 브라우저가 이미 알고있다. (세계적으로 신뢰할 수 있는 기업으로 등록되어 있기 때문에, 브라우저가 인증서를 탐색하여 해독이 가능한 것)
단, HTTPS도 무조건 안전한 것은 아니다. (신뢰받는 CA 기업이 아닌 자체 인증서 발급한 경우 등)