데이터를 주고 받기 위한 프로토콜이다.
HTTP에서 서버가 클라이언트의 상태를 보존하지 않는 무상태 프로토콜이다. 간단한 예시를 들자면 클라이언트가 서버에게 ‘저녁에 치킨먹자’고 말했고 서버가 ‘그래’라고 답했다. 저녁이 되어 클라이언트는 서버에게 ‘먹으로 가자’고 말했고 서버는 대답했다. ‘뭘?’
Hyper Text Transfer Protocol Secure의 약자이며 인터넷에서 통신할 때 사용되는 기본 HTTP 프로토콜의 보안 암호화 버전이다.
HTTPS는 사용자와 웹사이트 간에 전송될 때 민가만 데이터를 비공개로 유지하는 Hypertext Prootocol Secure의 약자이며 암호화 기술을 통해 승인된 당사자만 볼 수 있도록 한다.
HTTPS는 두 당사자 간에 데이터를 안전하고 비공개로 전송하는 방법이다.
HTTP는 웹을 지탱하는 심플한 기술이지만 단점이 있다. 브라우저와 웹 서버가 통신함에 있어서 주고 받는 데이터가 암호화 되지 않고 그대로 전송 되어진다.
이러한 도청을 스니핑(sniffing)이라고 한다.
HTTP는 인터넷이라는 통로를 이용해 웹 서버와 브라우저가 서로 통신하게 해주므로, 해커가 그 중간 통로를 도청하게 된다면 중요한 정보들을 탈취할 수 있다.
HTTPS는 SSL(Secure Socket Layer)
or TLS(Transport Layer Security)
와 같은 프로토콜을 사용하여 공개키/개인키 기반으로 데이터를 암호화하고 있다. 데이터는 암호화되어 전송되기 때문에 임의의 사용자가 데이터를 조회하여도 원본의 데이터를 보는 것은 불가능하다.
HTTPS는 HTTP 통신을 함에 있어 데이터를 암호화 하여 통신한다. 따라서 중간에 통신을 도청 할지라도 내용을 알아볼 수 없다. 그러면 웹 서버에서는 브라우저에서 보내는 데이터 정보를 어떻게 알까 ?
데이터 암호화에는 키(Key)
가 필요하다. A와 B가 어떤 데이터에 대해서 똑같은 암호화 알고리즘을 사용한다면 같은 결과가 나올것이기에 어떤 암호화 알고리즘을 사용하는지만 알아낸다면 암호화된 데이터일지라도 쉽게 답을 유추할 수 있다. 그러나 암호화 키라는 변수를 두면 암호화 결과를 달라지도록 할 수 있어 데이터를 예측 할 수 없게 된다.
암호화시 사용하는 암호화 키는 매우 중요하며 해커에게 노출되어서는 안된다. 그런데 중요한 점은 암호화된 데이처를 원래 데이터로 복호화 하는 과정에서도 키가 필요하다.
따라서 암호화된 데이터를 주고 받기 이전에 통신할 대상과 키를 분배하여 공유해야 한다. 그런데 키를 공유하게 되면 키를 주고 받는 과정에서 해커에게 노출될 수 있다. 해커가 키를 가로챈다면 데이터를 암호화 하여 통신한다고 하여도 데이터를 마음대로 복호화하여 들어다 볼 수 있다. 그러면 그 키를 또 암호화해야 할까 ? 그러면 또 그 그에 대한 암호화 키가 필요하게 될 것이고 점점 복잡해질 뿐 해결책이 되지는 못한다. 그래서 SSL이라는 것이 등장한다.
HTTPS 통신 과정
위 과정을 통해서 대칭키와 암호화 방식으로 데이터를 송, 수신하게된다.
두 프로토콜 사이에 가장 커다란 차이점은 SSL 인증서이다.
위 세가지는 다른 암호화하지 않은 프로토콜에도 공통되는 문제점들이다.
TCP/IP 구조의 통신은 전부 통신 경로 상에서 엿볼 수 있다. 패킷을 수집하는 것만으로 도청할 수 있다. 평문으로 통신을 할 경우 메시지의 의미를 파악할 수 있기 때문에 암호화하여 통신해야 한다.
보안 방법
SSL(Secure Socket Layer)
or TSL(Trans Layer Security)
라는 다른 프로토콜을 조합합으로써 HTTP의 통신 내용을 암호화할 수 있다. SSL을 조합한 HTTP를 HTTPS(HTTP Secure)
or HTTP over SSL
이라고 부른다.HTTP에 의한 통신에는 상대가 누구인지 확인하는 처리는 없기 때문에 누구든지 request를 보낼 수 있다. IP 주소나 포트 등에서 그 웹 서버에 액세스 제한이 없는 경우 reauest가 오면 상대가 누구든지 무언가의 response를 반환한다. 이러한 특징은 여러 문제점을 유발한다.
보안방법
위 암호화 방법으로 언급된 SSL
로 상대를 확인할 수 있다. SSL은 상대를 확인하는 수단으로 증명서를 제공한다. 증명서는 신뢰할 수 있는 제 3자 기관에 의해 발행되는 것이기 때문에 서버나 클라언트가 실재하는 사실을 증명한다. 이 증명서를 이용함으로써 통신 상대가 내가 통신하고자 하는 서버임을 나타내고 이용자는 개인 정보 누설 등의 위험성이 줄어들게 된다. 한 가지 이점을 꼽자면 클라이언트는 이 증명서로 본인 확인을 하고 웹 사이트 인증에서도 이용할 수 있다.
여기서 완전성이란 정보의 정확성을 의미한다. 서버 또는 클라이언트에서 수신한 내용이 송신측에서 보낸 내용과 일치한다라는 것을 보장할 수 없는 것이다. request나 response가 발신된 후에 상대가 수신하는 사이에 누군가에 이해 변조되더라도 이 사실을 알 수 없다. 이와 같이 공격자가 도중에 request나 reaponse를 빼앗아 변조하는 공격을 중간자 공격(Main-in-Middle)이라고 부른다.
보안 방법
MDS
, SHA-1
등의 해시 값을 확인하는 방법과 파일의 디지털 서명을 확인하는 방법이 존재하지만 확실히 확인할 수 있는 것은 아니다. 확실히 방지하기에 HTTPS
를 사용해야 한다. SSL에는 인증이나 암호화 그리고 다이제스트 기능을 제공하고 있다.
SSL을 적용하기 위해서는 인증서라는 것이 필요하다.
인증서의 내용은 크게 2가지로 구분할 수 있다.
이 인증서를 발급해주는 기업을 CA라고 한다. 인증서가 보안에 관련된 것인 만큼 CA는 영향력이 있고 신뢰할 수 있는 기업에서만 가능하다.