본문 바로가기
개발

[HTTP 완벽 가이드] 12장 기본 인증

by soyooooon 2025. 1. 2.
반응형

인증

웹 접근 시 HTTP 요청 메시지를 받으면, 서버는 요청을 처리할 때 사용자가 누구인지 파악하기 위한 '인증 요구'를 한다. 그리고 사용자가 인증 정보를 첨부해서 보내고 이 정보가 맞다면 요청을 문제없이 처리하는 과정을 거친다.

HTTP에는 기본 인증과 다이제스트 인증이라는 인증 프로토콜이 있다. 그 중 기본 인증은 가장 잘 알려진 HTTP 인증 규약이며, 거의 모든 주요 클라이언트와 서버에 기본 인증이 구현되어 있다. 기본 인증에서 웹 서버는 클라이언트의 요청을 401 상태 코드와 함께 거부하고 사용자 정보를 요구할 수 있다. 클라이언트가 접근하려고 했던 보안 영역을 WWW-Authenticate에 기술해서 인증 요구를 시작한다. 그리고 클라이언트는 사용자 이름과 비밀번호를 Authorization 요청 헤더 안에 암호화해서 서버로 보내게 된다.

Base-64 사용자 이름/비밀번호 인코딩

HTTP 기본 인증은 사용자 이름과 비밀번호를 콜론으로 이어서 합치고, base-64 인코딩 메서드를 사용해 인코딩 한다. 예를 들어 name과 password가 있다고 할 때 'name:password'를 만들고 이를 base-64로 인코딩해서 길고 복잡한 하나의 문자열로 만든다.

Base-64 인코딩은 바이너리, 텍스트, 국제 문자 데이터 문자열을 받아서 전송 가능한 문자인 알파벳으로 변환하기 위해 발명되었고, 전송 중에 원본 문자열이 변질될 걱정 없이 원격에서 디코딩할 수 있다. 또한 사용자 이름과 비밀번호 문자를 섞을 수 있기 때문에 서버나 네트워크를 관리하면서 뜻하지 않게 사용자 이름과 비밀번호가 노출되는 문제를 예방하는 데 도움을 준다.

프락시 인증

중개 프락시 서버를 통해 인증하는 방법도 있다. LAN이나 무선 네트워크에 접근하기 전에 프락시 서버를 거침으로써 사용자를 인증하고, 이는 중앙 관리가 가능하기 때문에 회사 리소스 전체에 대한 접근 제어를 하기 위해 프락시 서버를 사용하면 좋다.

기본 인증의 보안 결함

기본 인증은 단순하고 편리하지만 다음과 같은 문제가 있다. base-64는 인코딩 절차를 반대로 수행한다면 어렵지 않게 디코딩이 가능하다. 때문에 모든 HTTP 트랜잭션을 SSL 암호화 채널을 통해 보내거나, 보안이 더 강화된 다이제스트 인증 프로토콜을 사용하는 것이 좋다. 또한 base-64가 복잡한 방식으로 인코딩 되어있을지는 몰라도 이를 그대로 캡처하여 그대로 원 서버에 보낼 경우 인증에 성공하고 서버에 접근하게 될 수도 있기 때문에 주의가 필요하다. 그 외에도 가짜 서버의 위장에 취약하기도 하고 프락시로 인해 본래 의도가 변경되는 경우 정상적인 인증 동작이 되지 않을 수도 있다.

때문에 암호화된 데이터 전송을 연계하여 사용하거나, 다음 챕터에 나오는 다이제스트 인증을 참고하는 것이 좋다.

반응형