HTTP 🤔
예전에 어디선가 보안 문제로 인해 http대신 https로 되어있는 곳을 사용하란 이야기를 들은 적이 있었다. 아무 것도 몰랐을때는 단순 's'이 한글자 차이여서 뭐가 다른 건지 제대로는 몰랐다. 이제 제대로 한번 알아보자.
먼저 HTTP는 Hyper Text Transfer Protocol 이란 약자로 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜. 이라고 한다. 그러니까 HTTP는 인터넷에서 통신규약으로 80번 포트를 사용하고 있다.
그러니까 HTTP 서버가 80번 포트에서 요청을 기다리고 있고 클라이언트는 80번 포트로 요청을 보내게 된다.
HTTP의 구조 🏤
HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않는 프로토콜이며 다음 그림과 같이 메소드, 패치, 버전, 헤더, 바디로 구성된다.
HTTP는 암호화가 되지 않은 데이터를 전송하는 프로토콜이므로 HTTP로 비밀번호나 주민등록번호를 주고 받으면 제 3자가 정보를 조회할 수 있던 문제점이 있었다. HTTP의 단점을 자세하게 알아보자.
문제점 😢
- HTTP는 평문 통신이기 때문에 도청이 가능하다.
- 암호학에서 평문(平文)은 암호 알고리즘(보통은 암호화 알고리즘)의 입력 대상으로 예정이 된 암호화되지 않은 정보를 의미한다. 평문은 일반적으로 암호화되지 않고 전송 또는 저장된 데이터를 의미한다. 원문이라고도 한다
- 통신 상대를 확인 하지 않기 때문에 위장이 가능하다.
- 완전성을 증명할 수 없기 때문에 변조가 가능하다.
이렇게 세가지는 다른 암호화하지 않은 프로토콜에서 공통적인 문제점 들이다.
프로토콜은 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계입니다. 기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구합니다. 이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 합니다.
HTTP는 평문 통신이기 때문에 도청이 가능하다.
TCP/IP 구조의 통신은 경로상에서 전부 엿볼 수 있다. 패킷을 수집하는 것으로도 도청이 가능하다. (큰 문제점) 그렇기 때문에 암호화하여 통신해야한다. 이때에 사용되는 보완방법은 두가지다.
- 통신 자체를 SSL(Secure Socket Layer) 혹은 TLS(Transport Layer Security) 라는 프로토콜을 조합하여 HTTP 통신 자체를 암호화할 수 있다. 또 SSL을 조합한 형태를 HTTPS(HTTP Secure) 아니면 HTTP over SSL 이라고 부른다.
- 전부 암호화 하지 않고 HTTP를 사용해서 운반하는 내용 즉, HTTP 메시지에 포함되는 콘텐츠만 암호화 하는 방법이 있다. 이때 암호화해서 전송하면 받은 측에선 해독하여 출력하는 처리가 필요하다.
통신 상대를 확인 하지 않기 때문에 위장이 가능하다.
앞서 말한대로 HTTP는 통신 상대를 확인 하지 않기 때문에 누구든지 리퀘스트(request)를 보낼 수 있다. IP 주소나 포트 등에서 웹 서버에 접근 제한이 없을때 리퀘스트가 온다면 상대가 주인이던지 옆집 해커던지 말그대로 누구던지 무언가의 결과를 반환한다는 뜻이다. 이를 보완하는 방법은 아래와 같다.
바로 SSL 으로 보완이 가능하다. SSL은 상대를 확인하는 수단으로 증명성를 제공한다. 증명서는 신뢰할 수 있는 제 3자 기관에 의해 발행되므로 서버나 클라이언트가 실재하는 사실을 증명할 수 있다. 이것을 이용하여 개인 정보 누설 등의 위험이 줄어든다.
완전성을 증명할 수 없기 때문에 변조가 가능하다.
완전성은 정보의 정확성을 이야기 한다.
서버 또는 클라이언트에서 수신한 내용이 송신측에서 보낸 내용과 일치해야 하는데 이를 보장 할 수 없다는 뜻이다. 더 나아가서 중간에 위/변조 됐어도 알아차릴 수 없다. 그래서 다음과 같은 방법으로 보완한다.
- 보완 방법.
MD5, SHA-1 등의 해시 값을 확인하는 방법, 파일의 디지털 서명을 확인하는 방법이 존재하지만 확실히 하기 위해선 HTTPS를 사용하자. SSL에는 인증, 암호화, 다이제스트 기능을 제공하고 있다
다이제스트
비밀번호를 절대로 네트워크를 통해 평문으로 전송하지 않는다.
인증 체결을 가로채서 재현하려는 악의적인 사람들을 차단한다.
구현하기에 따라서, 메시지 내용 위조를 막는 것도 가능하다.
그 외 몇몇 잘 알려진 형태의 공격을 막는다
MD5 - MD5(Message-Digest algorithm 5)는 128비트 암호화 해시 함수이다. RFC 1321로 지정되어 있으며, 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용된다.
SHA(Secure Hash Algorithm, 안전한 해시 알고리즘) 함수들은 서로 관련된 암호학적 해시 함수들의 모음이다. 이들 함수는 미국 국가안보국(NSA)이 1993년에 처음으로 설계했으며 미국 국가 표준으로 지정되었다. 나중에 설계된 함수들과 구별하기 위하여 SHA-0이라고도 불린다. 2년 후 SHA-0의 변형인 SHA-1이 발표되었으며, 그 후에 4종류의 변형, 즉 SHA-224, SHA-256, SHA-384, SHA-512가 더 발표되었다.
HTTPS 🔐
이제는 HTTP와 HTTPS가 아예 다른것이 아닌 SSL의 껍질을 덮어쓴 HTTP라는 것을 알 수 있었다. 전문적으로 말해서 HTTPS는 새로운 애플리케이션 계층의 프로토콜이 아니라는 것.
원래는 HTTP가 TCP와 직접 통신했지만 이제는 HTTPS에서 HTTP는 SSL과 통신하고 SSL이 TCP와 통신하게 된다.
HTTP -> SSL / SSL -> TCP
그리하여 HTTPS는 암호화와 증명서 안전성 보호을 이용할 수 있게 됐다. 그렇다면 모든 웹 페이지 에서 HTTPS를 사용하는게 더 좋지 않을까?
일단은 평문 통신에 비해서 암호화 통신은 CPU나 메모리 등으로 리소스를 더 많이 요구하는 것은 사실이다. 왜냐면 통신할 때마다 암호화를 하면 추가적인 리소스를 소비해야하기 때문에 서버 한 대당 처리 할 수 있는 요청(리퀘스트)의 수가 줄어든다.
하지만 이것은 옛날 이야기고 요즘에는 하드웨어의 발달이 비약적으로 증가했기 때문에 실질적인 속도 차이는 얼마 없다. 그리고 새로운 표준 HTTP 2.0을 함께 사용할때 오히려 HTTPS가 더 빠르다.
한마디로 모든 웹 사이트에 HTTPS를 사용하는 것으로 변해가고 있다.
출처.
https://www.ibm.com/docs/ko/aix/7.1?topic=protocols-internet-application-level
'1일 1cs' 카테고리의 다른 글
[1일] 데이터 구조. (0) | 2023.01.09 |
---|---|
SQL의 종류 (1) | 2022.09.25 |
스택(Stack)2개로 큐(Queue) 구현하기 (0) | 2022.09.18 |
운영체제 / 스풀링(Spooling) 알아보기 (0) | 2022.09.15 |
페이지 교체 알고리즘💻 (2) | 2022.09.13 |