아래는 SSL/TLS 와 SSL/TLS handshake에 대한 글이다. HTTP와 HTTPS를 비교하기 앞서 해당 개념들을 알고 있다면 이해하기 더욱 쉬울 것이다.
https://jnsodevelop.tistory.com/68
[Network] SSL/TLS
1. 개념 1) SSL (Secure Sockets Layer) SSL은 '보안 소켓 계층' 이라고 불리는 암호화 기반 인터넷 프로토콜이다. 1995년 Netscape 사에서 처음 개발되었으며, 인터넷 통신에서 개인 정보 보호, 인증, 데이터
jnsodevelop.tistory.com
https://jnsodevelop.tistory.com/69
[Network] SSL/TLS handshake
네트워크를 공부했던 사람이라면 TCP 의 접속 과정인 '3-way handshake', '4-way handshake' 등의 용어를 들어봤을 것이다. CS 스터디를 하던 중 나는 이번에 'SSL/TLS handshake'를 주제로 발표를 맡았다. 처음 들
jnsodevelop.tistory.com
1️⃣ HTTP
1) 개념
HTTP (HyperText Transfer Protocol)은 인터넷을 통해 데이터를 전송하기 위한 프로토콜중 하나이다. 다음과 같은 특징을 갖는다.
- Client-Server 간 텍스트 기반의 데이터를 교환하는 프로토콜이다.
- 주로 정적인 콘텐츠를 전송하며, 웹 페이지를 요청하고 응답하는 데에 사용된다.
- 웹 브라우저는 웹 서버로부터 HTML 문서, 이미지, 비디오 등의 데이터를 요청하고 받아온다.
- 예시) http://www.jnseodevelop.com
2) HTTP의 약점
1) 도청 가능
HTTP를 사용한 요청, 응답 통신 내용은 HTTP 자신을 암호화하는 기능이 없기 때문에 통신 전체가 암호화 되지 않는다. 즉, 암호화 되지 않은 평문(Plain Text)로 HTTP 메시지를 전송한다. TCP/IP의 구조로 통신하는 내용은 통신 경로의 중간에서 가로챌 수 있기 때문에 도청과 데이터 변조에 취약하다. 당장 'Wireshark'와 같은 툴을 사용해서 HTTP 요청과 응답의 내용을 취득하는 일은 어렵지 않다.
2) 위장 가능
HTTP를 사용한 요청, 응답에서는 통신 상대를 확인하지 않는다. 요청을 보낸 서버가 URI에서 지정된 호스트인지 아닌지, 응답을 반환한 클라이언트가 해당 응답에 대한 요청을 보낸 클라이언트인지 아닌지 알 수 없다. 따라서 누구나 요청을 보낼 수 있고, 특별한 경우가 아닌 이상 응답을 받을 수 있다. 이러한 특성때문에 다음과 같은 문제가 발생할 수 있다.
- 요청을 보낸 곳의 웹 서버가 원래 의도한 응답을 보내야 하는 웹 서버인지 아닌지를 확인할 수 없다. 만약 위장한 웹 서버일 경우 문제가 발생한다.
- 응답을 반환한 곳의 클라이언트가 원래 의도한 요청을 보낸 클라이언트인지 아닌지를 확인할 수 없다. 만약 위장한 클라이언트일 경우 문제가 발생한다.
- 통신하고 있는 상대가 접근이 허가된 상대인지 아닌지를 확인할 수 없다. 만약 중요한 정보를 가진 웹 서버라면 특정 상대만 통신해야 하는데, 누가 요청을 하고 응답했는지 알 수 없다.
- 의미 없는 요청도 수신하게 된다. 대량의 요청에 의한 DoS 공격을 받을 수 있다.
3) 변조 가능
완전성을 증명할 수 없기 때문에 변조 가능하다. 여기서 완전성은 정보의 정확성을 말한다. 즉, 특정 정보가 정확한지 아닌지를 확인할 수 없다. 따라서 요청이나 응답이 발신된 후에 상대가 수신할 때까지 데이터가 변조되었다고 하더라도 해당 사실을 알 수 없다. 이는 발신된 요청이나 응답이 수신한 요청이나 응답이 다를 수 있기 때문에 문제가 발생한다.
만약 특정 웹 사이트에서 파일을 다운로드했을 때 클라이언트가 다운로드한 파일과 서버 상에 있는 파일이 정말로 같은지 확인 할 방법이 없다. 파일이 도중에 다른 파일로 변경된다면 클라이언트에선 잘못된 파일을 다운로드하는 것이기 때문에 공격자가 이를 악용해 해킹이나 데이터 변조 등의 위험이 따른다.
3) 약점 보완 방법
1) 통신 암호화 및 콘텐츠 암호화
도청에 대한 해결책으로 통신 및 콘텐츠 암호화가 있다. HTTP엔 암호화 구조가 없기 때문에 SSL(Secure Socket Layer)이나 TLS(Transport Layer Security)와 같은 프로토콜을 조합함으로써 통신 내용을 암호화할 수 있다. SSL 등을 이용해 안전한 통신 경로를 확보하고, 해당 통로를 사용해 HTTP 통신을 하는 방법이다. 이렇게 SSL을 조합한 HTTP를 'HTTPS' 또는 'HTTP over SSL'이라고 한다.
통신 자체를 암호화하는 것 외에도 통신하는 대상인 콘텐츠 내용 자체를 암호화하는 방법도 있다. HTTP 메시지에 포함되는 콘텐츠만 암호화하면 된다. 하지만 이 때 클라이언트에서 암호화된 HTTP 메시지를 암호화해서 출력하는 처리가 필요하다. 암호화된 콘텐츠를 유효하게 하기 위해서는 클라이언트와 서버가 콘텐츠의 암호화나 복호화 구조를 가지고 있어야 한다. 따라서 평상시 우리가 사용하는 웹 브라우저나 서버에서는 사용이 어렵고, 주로 웹 서비스 등에서 이용된다.
2) 증명서 활용
HTTP에서는 통신 상대를 확인할 수 없지만 SSL을 통해 상대를 확인할 수 있다. 이는 암호화뿐만 아니라 상대를 확인하는 수단으로 증명서를 제공한다. 이는 신뢰할 수 있는 제3자 기관에 의해 발행되는 것이기 때문에 서버나 클라이언트가 실재한다는 사실을 증명한다. 실제로 해당 증명서를 위변조하는 것은 어렵기 떄문에 통신 상대의 서버나 클라이언트가 가진 증명서를 확인함으로써 통신 상대를 확인할 수 있다.
2️⃣ HTTPS
1) 개념
HTTPS (HyperText Transfer Protocol Secure) 또한 인터넷을 통해 데이터를 전송하기 위한 프로토콜중 하나이다. HTTPS는 HTTP에 보안 기능이 추가된 버전으로, SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용하여 데이터를 암호화한다. 다음과 같은 특징을 갖는다.
- 데이터의 안전성과 무결성을 보장하여 도청, 데이터 변조, 중간자 공격 등으로부터 보호한다.
- 웹 브라우저와 웹 서버 간의 통신을 암호화하여 사죵자의 개인 정보와 기밀 데이터를 안전하게 전송한다.
- HTTPS를 사용하는 웹 사이트에서는 보통 SSL 인증서를 사용하며, 이는 웹 사이트의 신원을 확인하고 통신의 안전성을 보장한다.
- 예시) https://www.jnsodevelop.com
2) HTTPS 사용 이유
HTTP 통신은 암호화되지 않은 평문으로 정보를 교환한다. 또한 통신 상대의 서버나 클라이언트를 인증하는 수단이 없다. 이러한 문제를 해결하기 위해 암호화와 인증, 완전성 보호의 기능을 추가해야 할 것이다. HTTP에 이러한 구조를 더한 것이 바로 'HTTPS'이다.
HTTPS를 사용하는 통신은 웹 페이지의 로그인이나 쇼핑의 결제 등에서 사용된다. URI는 'http://' 대신 'https://'를 사용한다. 또한 HTTPS가 유효한 웹 사이트에서 액세스하면 자물쇠 마크가 표시되는 등 HTTP와는 다르게 표시될 수 있다. 결국 HTTPS를 사용하는 이유는 보안과 개인 정보 보호를 강화하기 위함이다.
1) 데이터 보안 보장
HTTPS는 HTTP 통신을 하는 소켓 부분을 SSL 또는 TLS 프로토콜로 대체한다. SSL을 사용함으로써 HTTP는 HTTPS로서 암호화와 증명서, 완전성 보호를 보장 받는다. 즉, HTTPS 는 HTTP 에 SSL이라는 껍질을 덮어 쓴 것이다. 따라서 SSL이 TCP와 통신하게 된다. 이를 통해 데이터가 전송되는 동안 중간에서 도청되거나 조작되는 것을 방지한다.
2) 개인 정보 보호
HTTPS는 사용자의 개인 정보를 보호한다. 웹 사이트에서 사용자가 제공하는 로그인 정보, 결제 정보, 개인 메시지 등은 암호화되어 전송되므로 중요 정보가 유출되는 것을 방지한다.
3) 신원 확인
HTTPS를 사용하는 웹 사이트는 SSL 인증서를 사용하여 서버의 신원을 확인할 수 있다. 이는 사용자가 웹 사이트와 안전하게 통신하고있느지 확인할 수 있도록 도와준다.
4) 신뢰성 제공
HTTPS를 사용하는 웹 사이트는 브라우저에 보안 아이콘이 표시되어 사용자에게 안전한 웹 사이트임을 알려준다. 이는 웹 사이트에 대한 신뢰성을 높여준다.
5) 쿠키 보호
HTTPS를 사용하면 쿠키가 암호화되어 전송되므로 중간에서 쿠키를 가로채어 읽는 것을 방지할 수 있다.
3️⃣ HTTP, HTTPS 비교
특성 | HTTP | HTTPS |
암호화 | 사용하지 않음 (평문 전송) | SSL 또는 TLS 프로토콜을 통해 데이터 암호화 |
데이터 보안 | 무보안 | 중간에서 도청이나 조작을 방지하기 위해 암호화 |
URL | http://www.example.com | https://www.example.com |
포트 번호 | 80 | 443 |
신원 확인 | 없음 | SSL 인증서를 통해 서버 신원 확인 |
안전성 표시 | 없음 | 브라우저 주소 표시줄에 안전한지 표시 (자물쇠 아이콘 등) |
SEO 영향 | 검색 엔진 랭킹에 영향이 없음 | HTTPS를 사용하는 경우 검색 엔진 랭킹에 이점이 있음 |
쿠키 보안 | 암호화되지 않음 | 암호화되어 전송되므로 중간에서 쿠키를 가로채는 것을 방지 |
데이터 무결성 | 보장되지 않음 | 암호화를 통해 데이터 무결성 보장 |
속도 | 암호화가 없어 빠름 | 암호화 및 복호화 과정이 추가되므로 약간 느림 |
사용자 인증 | 없음 | 선택적으로 클라이언트 인증 제공 가능 |
참고
그림으로 배우는 Http & Network Basic 도서