#1. HTTP를 안전하게 만들기
사람들은 웹 트랜잭션을 중요한 일에 사용한다. 강력한 보안이 없다면 온라인 쇼핑이나 인터넷뱅킹을 할 때 안심할 수 없을 것이다. 보다 중요한 트랜잭션을 위해서는 HTTP와 디지털 암호화 기술을 결합해야 한다.
- 서버 인증 - 클라이언트는 위조된 서버가 아닌 진짜 서버와 대화하고 있음을 알아야 한다.
- 클라이언트 인증 - 서버는 가짜가 아닌 진짜 사용자와 이야기하고 있음을 알아야 한다.
- 무결성 - 클라이언트와 서버는 데이터가 위조되는 것으로부터 안전해야 한다.
- 암호화 - 클라이언트와 서버는 도청에 대한 걱정 없이 서로 대화할 수 있어야 한다.
- 효율 - 저렴한 클라이언트나 서버도 이용할 수 있도록 알고리즘은 충분히 빨라야 한다.
- 편재성(Ubiquity) - 프로토콜은 거의 모든 클라이언트와 서버에서 지원되어야 한다.
- 관리상 확장성 - 누구든 어디서든 즉각적인 보안 통신을 할 수 있어야 한다.
- 적응성 - 현재 알려진 최선의 보안 방법을 지원해야 한다.
- 사회적 생존성 - 사회의 문화적, 정치적 요구를 만족시켜야 한다.
HTTPS
HTTPS는 HTTP를 안전하게 만드는 방식 중에서 가장 인기있다. HTTPS를 사용할 때 모든 HTTP 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화된다.
HTTPS는 HTTP 하부에 전송 레벨 암호 보안 계층을 제공함으로써 동작하는데 이 보안 계층은 안전 소켓 계층(Secure Sokets Layer, SSL) 혹은 그를 계승한 전송 계층 보안(Transport Layer Secure, TLS)을 이용하여 구현된다.
#2. HTTPS의 세부사항
HTTPS 스킴과 보안 전송 셋업
보안이 없는 일반적인 HTTP는 URL의 스킴 접두사는 http , 보안이 되는 HTTPS 프로토콜 URL의 스킴 접두사는 https
- URL이 http 스킴을 갖고 있다면 클라이언트는 서버에 80번(기본값) 포트로 연결하고 평범한 HTTP 명령 전송
- URL이 https 스킴을 갖고 있다면 클라이언트는 서버에 443번(기본값) 포트로 연결하고 서버와 바이너리 포맷으로 된 몇몇 SSL 보안 매개변수를 교환하면서 핸프셰이크를 하고 암호화된 HTTP 명령일 뒤를 잇는다.
SSL 핸드셰이크
암호화된 HTTP 메시지를 보낼 수 있게 되기 전에 클라이언트와 서버는 SSL 핸드셰이크를 할 필요가 있다
- 프로토콜 버전 번호 교환
- 양쪽이 알고 있는 암호 선택
- 양쪽의 신원을 인증
- 채널을 암호화하기 위한 임시 세션 키 생성
서버 인증서
SSL은 서버 인증서를 클라이언트로 전송하고 다시 클라이언트 인증서를 서버로 전송하는 상호 인증을 지원한다. 클라이언트 인증서는 오늘날 웹 브라우징에선 흔히 쓰이지 않는다. 하지만 보안 HTTPS 트랜잭션은 항상 서버 인증서를 요구한다.
서버 인증서는 서버를 얼마나 신뢰할 수 있는지 평가하는 것에 도움을 준다.
가상 호스팅과 인증서
가상 호스트(하나의 서버에 여러 호스트 명)로 운영되는 사이트의 보안 트래픽을 다루는 것은 까다롭다. 만약 사용자가 인증서의 이름과 정확히 맞지 않는 가상 호스트 명에 도착했다면 경고 상자가 나타날 것이다.
#3. 프락시를 통한 보안 트래픽 터널링
클라이언트는 종종 그들을 대신하여 웹 서버에 접근해주는 웹 프락시 서버를 이용한다. 클라이언트가 서버로 보낼 데이터를 서버의 공개키로 암호화하기 시작하면 프락시는 HTTP헤더를 읽을 수 없다.
HTTPS SSL 터널링 프로토콜을 사용해 이러한 문제를 해결한다.
- 클라이언트는 프락시에게 자신이 연결하고자 하는 안전한 호스트와 포트를 말함
- HTTP CONNECT 메서드는 프락시에게 희망하는 호스트와 포트번호로 연결을 해달라고 말함
- 완료되면 클라이언트와 서버 사이에서 데이터가 오갈 수 있게 터널을 만듦
CONNECT 메서드
CONNECT home.netscape.com:443 HTTP/1.0
user- agent: Mozilla/1.1N
<SSL로 암호화된 데이터가 이 다음에 온다...>
HTTP/1.0 200 Connect established
Proxy-agent: Netscape-Proxy/1.1
참고 자료
- HTTP완벽가이드 , 인사이트
'HTTP' 카테고리의 다른 글
[HTTP] 국제화 : 문자집합 인코딩 (0) | 2020.05.06 |
---|---|
[HTTP] 엔터티와 인코딩 (0) | 2020.05.05 |
[HTTP] 기본 인증과 다이제스트 인증 (0) | 2020.05.05 |
[HTTP] 클라이언트 식별과 쿠키(Cookie) (0) | 2020.05.04 |
[HTTP] HTTP/2.0 (0) | 2020.05.04 |