.htpasswd 파일 생성기
Apache와 Nginx의 Basic 인증에 사용하는 .htpasswd 파일을 브라우저에서 안전하게 생성합니다. bcrypt, APR1-MD5, SHA-1을 지원하며 비밀번호는 서버로 전송되지 않습니다.
htpasswd 파일이란
htpasswd 파일은 사용자명:해시된 비밀번호 형식의 줄을 한 줄에 하나씩 담은 일반 텍스트 파일로, Apache와 Nginx의 Basic 인증에서 사용자 자격 증명을 저장하는 데 쓰입니다. 보통은 서버에 설치된 htpasswd 명령어로 만들지만, 명령줄이나 서버에 쉽게 접근할 수 없는 환경도 많아 같은 형식을 브라우저에서 바로 만들 수 있는 도구가 유용합니다.
이 도구는 입력한 비밀번호를 bcrypt, APR1-MD5, SHA-1 중 선택한 방식으로 해시하여 사용자명:해시 형식의 줄을 생성합니다. 모든 해시 계산은 자바스크립트로 브라우저 내에서 이루어지며 평문 비밀번호가 네트워크로 전송되는 일은 없습니다. 생성한 파일은 서버의 DocumentRoot 바깥에 두고 AuthUserFile 지시어로 경로를 지정해 참조하세요.
.htpasswd 파일 생성 방법
- 사용자 행 추가하기 필요한 사용자 수만큼 "사용자 추가" 버튼을 눌러 행을 만듭니다. 한 행이 사용자 한 명에 대응합니다.
- 사용자명과 비밀번호 입력하기 각 행에 사용자명과 비밀번호를 입력합니다. 표시/숨기기 전환으로 입력값을 확인할 수 있습니다.
- 알고리즘과 비용 선택하기 행마다 bcrypt·APR1-MD5·SHA-1 중 하나를 고릅니다. bcrypt를 선택했다면 비용 값(계산 강도)도 조정합니다.
- 생성 버튼 누르기 "생성" 버튼을 누르면 즉시 해시 계산이 실행되고, 아래에 .htpasswd 파일 내용 미리보기가 표시됩니다.
- 복사하거나 다운로드하기 결과를 클립보드에 복사하거나 파일로 다운로드하여 서버에 배치합니다.
더 잘 활용하기 위한 팁
- bcrypt 사용을 권장합니다. 현재 가장 안전한 알고리즘으로 Apache 2.4+ 및 Nginx에서 사용할 수 있습니다. 비용 값이 높을수록 해시 계산이 느려져 브루트포스 공격에 강해집니다(일반적인 권장값은 10).
- APR1-MD5(
$apr1$)는 Apache 2.2 이하와의 호환성이 필요한 경우에 사용합니다. 거의 모든 Apache 및 Nginx 버전에서 동작합니다. - SHA-1(
{SHA})은 충돌 저항성이 낮아 권장하지 않습니다. 하위 호환성이 필요한 레거시 환경에서만 사용하세요. - .htpasswd 파일은 웹 루트(
DocumentRoot) 외부에 배치하여 웹에서 직접 접근할 수 없도록 하세요. - 항상 HTTPS와 함께 사용하세요. Basic 인증의 자격 증명은 Base64 인코딩만 되어 있고 암호화되지 않아 HTTP 연결에서는 평문으로 전송됩니다.
활용 사례
공개 전 스테이징 환경 보호
검색엔진이나 제3자가 아직 공개되지 않은 스테이징 사이트에 접근하지 못하도록 간단한 Basic 인증으로 막습니다.
자체 로그인 기능이 없는 관리 도구 제한
내부용 관리자 패널이나 운영 도구처럼 로그인 기능을 직접 구현하지 않은 화면의 접근을 제한합니다.
IP 제한과 조합한 이중 방어
외부 협업자 등 IP 기반 제한만으로는 대응이 어려운 경우, Basic 인증을 추가해 이중으로 방어합니다.
특정 API 엔드포인트만 보호
location이나 Directory 지시어를 사용해 사이트 전체가 아닌 특정 경로만 인증 대상으로 지정합니다.
운영 중인 서비스에 사용자 추가
이미 운영 중인 .htpasswd 파일에 새 사용자를 추가할 때, 추가할 행만 생성해 기존 파일 끝에 붙입니다.
용어집
- Basic 인증
- HTTP 표준 인증 방식 중 하나로, 사용자명과 비밀번호를 Base64로 인코딩해 매 요청마다 전송하고 서버에서 검증합니다.
- bcrypt
- 솔트를 사용하는 비밀번호 해시 알고리즘입니다. 비용 계수를 조정할 수 있어 하드웨어 성능이 향상되어도 계산 속도를 느리게 유지할 수 있어 현재 권장됩니다.
- APR1-MD5
- Apache가 자체적으로 정의한 MD5 기반 해시 형식으로, 해시 값이
$apr1$로 시작합니다. 오래된 Apache와의 호환성을 위해 남아 있습니다. - SHA-1({SHA})
- 해시 값이
{SHA}로 시작하는 형식입니다. 솔트가 없고 충돌 저항성이 약해 새로운 용도로는 권장하지 않습니다. - 솔트(Salt)
- 해시를 계산하기 전에 비밀번호에 덧붙이는 무작위 문자열입니다. 같은 비밀번호라도 매번 다른 해시가 나오도록 만들어 레인보우 테이블 공격을 무력화합니다.
- DocumentRoot
- 웹 서버가 외부에 공개하는 파일들의 최상위 디렉터리입니다. .htpasswd 파일을 이 안에 두면 브라우저에서 직접 열람될 위험이 있습니다.
- AuthUserFile
- Basic 인증에 사용할 .htpasswd 파일의 경로를 지정하는 Apache 설정 지시어입니다.
자주 묻는 질문
.htaccess 또는 httpd.conf에 아래 설정을 추가하고, AuthUserFile에 생성한 .htpasswd 파일의 경로를 지정하세요:AuthType Basic AuthName "Restricted Area" AuthUserFile /etc/apache2/.htpasswd Require valid-user
nginx.conf 또는 해당 server 블록에 추가합니다:location /admin {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}Nginx는 bcrypt와 APR1-MD5를 모두 지원합니다.사용자명:해시 형식)을 기존 파일 끝에 추가하면 됩니다. 각 행이 한 명의 사용자에 해당하며, 빈 행과 #으로 시작하는 주석 행은 무시됩니다.
여담 ― Basic 인증이 오래됐는데도 여전히 쓰이는 이유
HTTP Basic 인증은 1999년 RFC 2617(현재 RFC 7617로 업데이트)에서 정의된 매우 단순한 인증 방식입니다. 사용자명과 비밀번호를 :로 구분하고 Base64로 인코딩하여 Authorization 헤더에 담아 전송합니다.
단순함이 곧 장수 비결입니다. 스테이징 환경, 내부 도구, IP 허용 목록과 조합한 이중 방어 등 다양한 용도로 활용됩니다. 설정 두세 줄로 작동하며 추가 미들웨어나 데이터베이스가 필요하지 않습니다.
한계도 있습니다. 로그아웃 기능이 없고(브라우저를 닫을 때까지 세션 유지), 비밀번호 만료 관리나 다단계 인증도 기본 제공되지 않습니다. 실제 보안 요구사항이 있는 서비스에는 OAuth 2.0 또는 OIDC를 검토하세요.