HTTP완벽가이드:보안 HTTP

Spacious_kitchen·2021년 9월 6일
0

HTTP완벽가이드

목록 보기
1/1

해당 내용은 HTTP완벽가이드 책 내용을 참고했습니다.

1. HTTPS

HTTP와 디지털 암호화한 기술을 결합한방식 중 하나 이다.

넷스케이프에서 개발하였으며,모든 브라우저와 서버에서 지원한다.

웹 페이지에 HTTPS로 접근하고 있는 경우, 좌물쇠 모양 혹은 https://로 시작한다.

HTTPS를 사용하면, 모든 응답과 요청 데이터가 암호화 되는게 이는 SSL(Secure sockets Layer)에서 진행된다.

엄밀하게 따지면 SSL(Secure socket Layer)과 TLS(Transport Layer Security)를 이용하지만 ,이를 통합하겠다.

어려운 인코딩과 디코딩이 모두 SSL라이브러리에서 일어나기 때문에 서버와 클라이언트가 크게 로직을 처리할 필요는 없다.

**디지털 암호학 부분은 건너 뛰겠다.

2.HTTPS의 세부사항

HTTPS의 암호화 기법은 HTTP프로토콜에 대칭과 비대칭 인증서 기반 기법의 집합을 결합한 방식이다.

3.HTTPS의 개요


간단하게 말하면,TCP 계층으로 전달되기 전에 보안 계층을 거치는 것이다.

4.HTTPS스킴

웹 서버로 요청을 할때, Url의 HTTPS스킴을 구분하여, 보안 처리를 할 지 안할 지를 결정한다.

http://www.google.com/

만약,이와 같이 https 스킴을 가지고 있다면

  1. 클라이언트는 서버에80(기본 포트)로 HTTP요청을 진행한다.
https://www.google.com/

만약,이와 같이 http 스킴을 가지고 있다면

  1. 클라이언트는 서버에 443(기본 포트)로 연결한다.
  2. 서버와 바이너리 포맷으로 된 SSL 보안 매개변수를 교환하면서 핸드쉐이크를 진행 한다.
  3. 그 뒤에 암호화 된 HTTP요청을 진행한다.

5.보안 전송 셋업

더 자세히 HTTP 트랜젝션을 살펴보자.

HTTP

  1. 클라이언트는 웹 서버에 80(기본 포트)로 커넥션을 요청한다.
  2. TCP 방식으로 http요청을 보낸다.
  3. TCP 방식으로 http응답을 보낸다.
  4. 커넥션이 닫힌다.

HTTPS

  1. 클라이언트는 웹 서버에 443(기본 포트)로 커넥션을 요청한다.
  2. 서버는 클라이언트로 SSL보안 매개변수와 교환 키를 협상한다.[핸드 쉐이크 과정]
  3. SSL계층을 초기화한다.
  4. 클라이언트는 SSL계층에 메시지를 보내어 암호화한다.
  5. 암호화 후에 TCP계층을 통과하며 http요청을 보낸다.
  6. 서버는 SSL을 통해 보내진 암호화된 메시지를 TCP방식으로 응답한다.(4,5 과정과 마찬가지)
  7. SSL이 닫힘 통지 된다.
  8. 커넥션이 닫힌다.

6.SSL 핸드 쉐이크

5.보안 전송 셋업을 통해, HTTPS의 통신 전 클라이언트와 서버는 SSL핸드쉐이크를 진행한다는 것을 알 수 있다.이를 상세히 알아보자.

5.보안 전송 셋업 HTTPS의 2.SSL 핸드쉐이크 과정에서는 다음과 같은 일이 일어난다.

  • 프로토콜 버전 번호 교환
  • 양쪽이 모두 알고 있는 암호 선택
  • 클라이언트와 서버의 신원 인증
  • 채널을 암호화 하기 위한 임시 세션 키 생성

해당 하는 그림은 데이터 전송 전, SSL핸드 쉐이킹 과정이다.

7.서버 인증서

모든 HTTPS 트랜잭션은 서버 인증서를 요구한다.
서버 인증서는 조직의 이름,주소,서버DNS도메인 이름, 그리고 그외 정보들을 바탕으로 구성되어있다.

8.프록시를 통한 트래픽 터널링

많은 회사들은 기업네트워크와 공공 인터넷을 연결 짓는 경계에 보안을 위해 프록시를 설정한다. 프록시는 방화벽 역할을 하여 바이러스 검사나 컨텐츠 제어를 수행한다.

그러나 클라이언트가 서버로 암호화된 데이터를 전송한다면, 프록시는 HTTP헤더를 읽을 수 없기 때문에 어디로 요청을 보내야하는 지 알수 없다.

이를 해결하기 위해 다양한 기법이 존재하지만, 주로 SSL 터널링 프로토콜인connect Method를 사용한다.

connect확장 Method를 사용하여 평문으로된 종단정보를 전송한다.
프록시를 통해 희망하는 포트와 호스트를 전송하고 이후 서버와 클라이언트가 연결되면, 데이터를 오갈 수 있는 터널이 생성된다.

CONNECT server.example.com:80 HTTP/1.1 //호스트 명과 포트

<SSL로 암호화  데이터가  다음에 온다......>

그림 출처
깜찍한 프로그래머들을 위한 간단한 프로그래밍 상식(4.HTTPS 와 SSL — 겉핥기)
HTTPS, SSL(Secure Socket Layer) 개념

profile
이왕 사는거 넓은 주방을 가지는 성공하는 삶을 살고 싶습니다.

0개의 댓글