http와 https 차이를 이해하기 쉽도록 간단히 요약해 보겠습니다.


HTTP


http는 클라이언트인 웹브라우저와 웹서버간 통신을 주고 받는 프로토콜이다.

html 페이지도 텍스트이고 http 도 텍스트 교환 방식으로 단순히 텍스트를 주고 받기 때문에 누군가가 통신 중간에 가로 챌 수 있어 노출되기 쉽다. 이러한 보안상의 문제를 해결하기 위한 방식으로 https 프로토콜을 사용한다.


HTTPS


https 는 공개키 암호화 방식을 따른다. 

서로 다른 A와 B의 키가 존재하여 문서를 A로 암호화한 것은 B를 통해 해독할 수 있고, B로 암호화한 것은 A를 통해 해독할 수 있는 방식이다. 


참고로, HTTPS 의 S는 Secure Socket 이라는 뜻이다.


이와 같은 방식으로 예를들어 웹브라우저는 A라는 키를 가지고 있고 웹서버는 B라는 키를 가지고 있습니다. 데이터를 보낼때 각자가 가지고 있는 키를 통해 암호화하여 전달하면 받는 사람은 자신이 가지고 있는 키를 통해 해독하여 내용을 확인 할 수 있습니다. 


사실, 이와 같은 방식은 보안상으로는 큰 의미는 없다. 왜냐하면 누구나 다 A라는 공개키를 얻을 수 있기 때문이다. 대신에 얻을 수 있는 다른 이점은 해당 서버로부터 온 응답이라는 점은 확신 할 수 있다는 것이다.

왜냐하면, 내가 가지고 있는 공개키로 해독이 가능 했기 때문이다.


웹브라우저가 공개키 어떻게 가질 수 있을까?


일단 공개키 저장소인 CA(Certificate Authority)라는 곳을 알아야 한다. CA 인증 기관은 신뢰할 수 있는 기업만 운영할 수 있다고 한다.


1. 웹서버에서 HTTPS 를 적용하기 위해 공개키 A와 개인키 B를 만들고 CA 인증 기관에 공개키 A를 관리해달라고 돈을 지불하면서 계약을 합니다.


2. 공개키 A를 받은 CA 기관은 공개키 A, CA 기관명, 공개키 암호화 방법 등의 정보를 담은 인증서를 만들고, 이 인증서를 CA 기관 자신의 개인키로 암호화 하여 웹서버에게 제공합니다.


3. 암호화된 인증서를 갖게된 웹서버는 HTTPS 요청이 아닌 요청이 오면 이 암호화된 인증서를 클라이언트에게 줍니다.

 ex) 클라이언트가 index.html 파일을 달라고 요청 했을 경우.


4. 브라우저는 세계적으로 신뢰할 수 있는 CA 기업의 공개키는 브라우저가 이미 알고 있습니다. 브라우저가 CA 기업 리스트를 살펴보면서 인증서에 적혀있는 CA기업 이름이 같으면 해당 기업의 공개키로 암호화된 인증서를 해독합니다.

(아까 위에서 암호화된 인증서를 CA 기업의 개인키로 암호화하여 웹서버에 전달 하였습니다.) 이렇게 안호화된 인증서를 해독하게 되면 웹서버의 공개키를 클라이언트인 웹브라우저가 알 수 있게되고 웹서버와 통신을 할 때 이 공개키로 암호화 하여 통신을 할 수 있게 됩니다.


HTTPS 방식은 무조건 안전한 것이 아닙니다


날이 갈수록 공격자는 섬세해 집니다. 역으로 HTTPS에 대한 신뢰를 이용하여 공격하기도 합니다.

공격자는 Let's Encrypt 같은 증명 발급처에서 무료로 증명서를 발급 받을 수 있다고 합니다고 합니다. 단순히 도메인 주소에 나타나 있는 초록색 안전함만을 믿어서는 안되겠습니다.



[출처] "티스토리," 기본기를 쌓는 정아마추어 코딩블로그, 2017년 11월 5일 수정, 2019년 3월 19일 접속, https://jeong-pro.tistory.com/89

+ Recent posts