12. 기본 인증
개요
인증(Authentication)은 사용자가 주장하는 신원이 실제 사용자의 신원과 일치하는지를 확인하는 과정입니다. 웹 시스템에서 인증은 사용자가 시스템에 접근하기 위해 자신의 신원을 증명하는 필수적인 절차입니다. HTTP는 이러한 인증을 위한 다양한 메커니즘을 제공하며, 이를 통해 서버는 클라이언트의 신원을 확인하고 권한을 부여할 수 있습니다.
12.1.1 HTTP 인증 요구/응답 프레임워크
HTTP는 서버와 클라이언트 간의 상호 작용을 통해 인증을 수행합니다.
- 인증 요구: 서버는 클라이언트의 요청에 대해 인증 정보를 요구할 수 있습니다. 이때 401 Unauthorized 상태 코드와 함께 WWW-Authenticate 헤더를 보냅니다. WWW-Authenticate 헤더에는 사용 가능한 인증 방식과 함께 추가적인 정보(예: realm)가 포함될 수 있습니다.
- 클라이언트의 응답: 클라이언트는 서버의 요구에 따라 Authorization 헤더에 인증 정보를 포함하여 다시 요청을 보냅니다. 인증 정보는 일반적으로 사용자 이름과 비밀번호를 Base64로 인코딩한 값입니다.
- 서버의 인증: 서버는 클라이언트가 보낸 인증 정보를 검증하고, 유효한 경우 요청을 처리하거나, 유효하지 않은 경우 다시 401 Unauthorized를 응답합니다.
12.1.2 인증 프로토콜과 헤더
HTTP 인증에는 다양한 프로토콜이 존재하며, 각 프로토콜은 서로 다른 방식으로 인증 정보를 교환합니다.
- WWW-Authenticate 헤더: 서버가 지원하는 인증 방식과 함께 추가적인 정보를 제공합니다.
- Authorization 헤더: 클라이언트가 서버에 인증 정보를 전달하는 데 사용됩니다.
- realm: 보호되는 자원의 범위를 나타냅니다. 하나의 서버에서 여러 개의 realm을 설정하여, 각 realm마다 다른 인증 정보를 요구할 수 있습니다.
12.2 기본 인증
기본 인증은 가장 간단한 HTTP 인증 방식으로, 사용자 이름과 비밀번호를 Base64로 인코딩하여 전송합니다. 하지만 보안 취약점이 많아 현대적인 웹 애플리케이션에서는 사용을 자제해야 합니다.
12.2.1 기본 인증의 예
- 인증 요청: 서버는 401 Unauthorized 상태 코드와 함께 WWW-Authenticate 헤더를 보냅니다.
HTTP/1.1 401 Unauthorized WWW-Authenticate: Basic realm="My Website"
- 클라이언트의 응답: 클라이언트는 Authorization 헤더에 Base64로 인코딩된 사용자 이름과 비밀번호를 포함하여 다시 요청을 보냅니다.
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
- 서버의 인증: 서버는 Base64를 디코딩하여 사용자 이름과 비밀번호를 추출하고, 저장된 정보와 비교하여 인증을 수행합니다.
12.2.2 Base-64 사용자 이름/비밀번호 인코딩
Base64 인코딩은 ASCII 문자만 사용하여 바이너리 데이터를 문자열로 변환하는 인코딩 방식입니다. 사용자 이름과 비밀번호를 콜론(:)으로 연결한 후 Base64로 인코딩하여 Authorization 헤더에 포함합니다.
12.2.3 프락시 인증
프락시 인증은 클라이언트가 웹 서버에 직접 접속하는 대신 프락시 서버를 거쳐 접속할 때, 프락시 서버에서 별도의 인증을 요구하는 방식입니다. 프락시 서버는 클라이언트의 요청을 대신 전달하고, 응답을 받아 클라이언트에게 전달하는 역할을 합니다.
- 장점:
- 중앙 집중 관리: 프락시 서버에서 모든 사용자의 인증을 관리할 수 있어 편리합니다.
- 보안 강화: 프락시 서버에서 추가적인 보안 기능을 적용하여 보안을 강화할 수 있습니다.
- 캐싱: 자주 요청되는 콘텐츠를 캐싱하여 응답 속도를 향상시킬 수 있습니다.
- 대역폭 관리: 대역폭 사용량을 제한하거나 특정 콘텐츠에 대한 접근을 제한할 수 있습니다.
- 단점:
- 성능 저하: 프락시 서버를 거쳐야 하므로 응답 시간이 다소 느려질 수 있습니다.
- 복잡성: 프락시 서버 설정 및 관리가 필요합니다.
프락시 인증의 예:
회사 내부 네트워크에서 외부 웹 사이트에 접속하려면 회사에서 운영하는 프락시 서버를 통해 접속해야 하고, 프락시 서버에서 사용자 인증을 요구하는 경우입니다. 클라이언트는 웹 브라우저 설정에서 프락시 서버 주소와 인증 정보를 입력하여 프락시 서버를 통해 웹 서버에 접속하게 됩니다.
12.3 기본 인증의 보안 결함 및 개선점
기본 인증은 다음과 같은 보안 문제를 가지고 있습니다.
- 평문 전송: Base64 인코딩은 암호화가 아니므로 쉽게 해독될 수 있습니다. HTTP 통신이 암호화되지 않은 상태로 이루어진다면 도청의 위험에 노출됩니다.
- 재전송 공격: 한번 성공적으로 인증된 요청을 가로채서 재사용할 수 있습니다.
- 같은 비밀번호의 반복 사용: 다양한 웹 사이트에서 동일한 비밀번호를 사용하는 경우, 하나의 사이트에서 비밀번호가 유출되면 다른 사이트의 계정도 위험해질 수 있습니다.
- 프락시 공격: 중간에 위치한 프락시 서버가 인증 정보를 가로채거나 변조할 수 있습니다.
- 가짜 서버 공격: 공격자가 진짜 서버처럼 위장하여 사용자의 인증 정보를 빼내갈 수 있습니다.
기본 인증의 보안 문제를 해결하기 위해 다음과 같은 방법들을 활용할 수 있습니다.
- HTTPS 사용: HTTP 통신을 HTTPS로 전환하여 통신 내용을 암호화함으로써 도청을 방지합니다. HTTPS는 SSL/TLS 프로토콜을 사용하여 데이터를 암호화하고, 서버 인증을 통해 안전한 통신 채널을 제공합니다.
'책정리 > HTTP 완벽 가이드' 카테고리의 다른 글
[HTTP 완벽 가이드 10장] HTTP/2.0 (0) | 2025.01.12 |
---|---|
[HTTP 완벽가이드 9장] 웹 로봇 (0) | 2025.01.05 |