htpasswd 생성기 — bcrypt, Apache MD5 (apr1) & Basic Auth
bcrypt, Apache MD5 (apr1), SHA-1 등으로 htpasswd 항목을 생성하는 웹 도구. Apache, nginx, Docker 설정 스니펫 포함. 100% 브라우저에서 처리 — 업로드 없음.
기존 해시 검증
htpasswd 파일이란?
An .htpasswd 파일은 HTTP Basic 인증에 사용되는 자격증명을 저장합니다. 각 줄은 username:hash 쌍으로, 해시는 비밀번호의 단방향 다이제스트이며 평문은 저장되지 않습니다. 웹 서버는 이 파일을 읽어 보호된 URL에 누가 접근할 수 있는지 결정합니다. Apache에서는 .htaccess 파일(또는 <Directory> 블록)이 .htpasswd 파일을 참조하여 페이지를 제공하기 전에 브라우저에 사용자 이름과 비밀번호를 요청합니다.
해시 형식은 어떤 알고리즘으로 생성했느냐에 따라 달라집니다. Apache의 htpasswd 도구는 여러 형식을 지원합니다: bcrypt($2y$로 시작)는 가장 강력하며 Apache, Docker Registry, Caddy에 권장됩니다; apr1(Apache MD5, $apr1$로 시작)는 가장 이식성이 높고 nginx의 안전한 기본값입니다; SHA-1({SHA}로 시작)은 솔트가 없어 안전하지 않습니다; crypt(전통적인 DES)는 레거시이며 8자에서 잘립니다; plain은 비밀번호를 평문으로 저장하며 운영 환경에서는 절대 사용해서는 안 됩니다.
이 생성기는 완전히 브라우저 내에서 실행됩니다 — 사용자 이름, 비밀번호, 해시가 절대 업로드되지 않습니다. 강력한 비밀번호가 필요하다면 랜덤 비밀번호 생성기를 이용하세요. Authorization: Basic 헤더를 직접 만들려면, 자격증명은 단순히 base64(user:password)이며 Base64 인코더로 생성할 수 있습니다. 엔드포인트를 보호한 뒤에는 cURL 명령 빌더로 명령줄에서 테스트해보세요.
# Apache htpasswd CLI equivalents (apache2-utils / httpd-tools) # bcrypt entry, printed to stdout (recommended; -B = bcrypt, -n = no file, -b = password on CLI) htpasswd -Bbn admin 's3cret' # → admin:$2y$10$N9qo8uLOickgx2ZMRZoMye... # apr1 (Apache MD5) entry, portable for nginx — no apache2-utils needed printf "admin:$(openssl passwd -apr1 's3cret')\n" # → admin:$apr1$k3l4Hj9.$qN8... # Append a user to an existing file from the shell htpasswd -B /etc/apache2/.htpasswd alice # Note: nginx delegates bcrypt to the system crypt(); on Alpine/musl or old # glibc that fails — prefer apr1 for nginx to stay portable.
주요 기능
다양한 해시 알고리즘
bcrypt ($2y$), apr1 / Apache MD5 ($apr1$), SHA-1 ({SHA}) 항목을 생성하고, 테스트용 plain(평문) 옵션도 제공합니다. 형식이 지원하는 경우 각각 새로운 랜덤 솔트를 사용합니다.
생성 및 검증
새 항목을 만들거나 기존 항목을 검증하세요. 저장된 user:hash 줄과 후보 비밀번호를 붙여넣으면 일치 여부를 즉시 확인할 수 있어 운영 중 401 오류 디버깅에 유용합니다.
서버별 자동 선택
Apache, nginx, Docker, Caddy 중 하나를 선택하면 올바른 알고리즘이 자동으로 선택됩니다 — 지원되는 경우 bcrypt, nginx 이식성을 위해 apr1 — 무음 crypt() 실패를 방지합니다.
바로 붙여넣을 수 있는 설정 블록
Apache .htaccess, nginx auth_basic, Docker, Kubernetes ingress-nginx, Caddy, Traefik 등 6가지 복사 준비 설정 스니펫이 생성된 .htpasswd 항목에 맞게 제공됩니다.
100% 클라이언트 사이드
모든 해싱은 Web Crypto와 번들된 bcrypt 구현을 통해 브라우저 로컬에서 처리됩니다. 사용자 이름, 비밀번호, 해시가 서버로 전송되지 않으므로 운영 자격증명을 안전하게 생성할 수 있습니다.
예시
bcrypt 항목 (권장)
admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
$2y$ 접두사와 비용 10의 bcrypt 항목입니다. 가장 강력하고 이식성 높은 형식으로 Apache, Docker Registry, Caddy, Traefik에 사용하세요.
apr1 항목 (이식성 높은 nginx용)
admin:$apr1$kl3H9j2.$qN8vY7tLp2mZ0xW5cR4fK1
$apr1$ 마커 뒤에 8자 솔트가 붙은 Apache MD5 (apr1) 항목입니다. nginx의 bcrypt 검증이 불안정한 시스템 crypt()에 의존하기 때문에 nginx의 안전한 기본 형식입니다.
SHA-1 항목 (레거시)
admin:{SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g= {SHA} 항목은 솔트 없는 SHA-1 다이제스트의 base64입니다. Apache와 nginx가 허용하지만 솔트가 없어 안전하지 않습니다 — 레거시 호환성 목적으로만 포함됩니다.
Authorization: Basic 헤더
Authorization: Basic YWRtaW46czNjcmV0
동일 사용자의 클라이언트 측 자격증명: base64('admin:s3cret'). .htpasswd 파일 없이 curl -H나 Postman으로 이 헤더를 전송해 인증하세요.
다중 사용자 .htpasswd 파일
admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy alice:$2y$10$3bQ8xY7tLp2mZ0xW5cR4fO9vK1jH6sD2nG8aQ5wE3rT7uI4oP1cm bob:$apr1$mZ0xW5cR$4fK1jH6sD2nG8aQ5wE3rT2
사용자당 username:hash 줄 하나씩. 같은 파일에 알고리즘을 혼합할 수 있습니다 — 여기서는 bcrypt 항목 두 개와 apr1 항목 하나가 세 사용자를 위해 공존합니다.
사용 방법
- 1
서버 및 알고리즘 설정
대상 서버(Apache, nginx, Docker, Caddy)를 선택하세요. 적합한 알고리즘이 자동으로 선택됩니다 — Apache/Docker/Caddy에는 bcrypt, 이식성 높은 nginx에는 apr1. 직접 변경하거나 bcrypt 비용을 조정할 수도 있습니다.
- 2
해시 생성
사용자 이름과 비밀번호를 입력하거나(또는 랜덤 비밀번호 클릭) 생성 버튼을 클릭하세요. 해시는 새로운 랜덤 솔트로 로컬에서 계산됩니다. 언제든지 솔트를 재생성해 새 항목을 만들 수 있습니다.
- 3
항목 복사
.htpasswd 파일용 user:hash 줄을 복사하거나, 셸용 echo >> 추가 명령어를 복사하거나, curl과 Postman용 Authorization: Basic 헤더를 복사하세요.
- 4
설정 배포
생성된 설정 블록을 Apache .htaccess, nginx 서버 블록, Docker, Kubernetes 인그레스, Caddy, 또는 Traefik 설정에 붙여넣고, .htpasswd 파일 경로를 지정한 뒤 서버를 재시작하세요.
주요 활용 사례
- Apache 디렉토리 보호
- .htaccess 파일과 AuthUserFile 지시어를 사용해 HTTP Basic Auth로 폴더를 잠그세요. bcrypt 항목과 생성된 Apache 설정 블록을 사용하면 모든 경로에 로그인을 요구할 수 있습니다.
- nginx auth_basic
- auth_basic과 auth_basic_user_file로 location 또는 서버 블록을 보호하세요. apr1 형식을 사용하면 Alpine, Debian 등 다양한 베이스 이미지에서 안정적으로 동작합니다.
- Docker Registry
- 프라이빗 Docker Registry는 bcrypt htpasswd 항목만 허용합니다. htpasswd -Bbn으로 $2y$ 줄을 생성하고, 레지스트리 컨테이너에 마운트한 뒤 docker login으로 인증하세요.
- Kubernetes ingress-nginx
- .htpasswd 파일로 basic-auth 시크릿을 만들고, nginx.ingress.kubernetes.io/auth-type과 auth-secret 어노테이션으로 인그레스 라우트를 보호하세요.
- Caddy & Traefik
- Caddy의 basic_auth 지시어와 Traefik의 basicauth 미들웨어는 모두 bcrypt 해시를 필요로 합니다. 생성된 항목을 Caddyfile이나 Traefik labels/dynamic config에 직접 붙여넣으세요.
- curl & Postman Authorization 헤더
- 빠른 테스트를 위해 파일 없이 Authorization: Basic 헤더를 복사해 자격증명을 직접 전송하세요. curl -H 플래그나 Postman 요청에 붙여넣어 보호된 엔드포인트를 테스트할 수 있습니다.
기술 세부사항
- bcrypt ($2y$)
- 조정 가능한 비용 인수를 가진 Blowfish 암호 기반의 적응형 솔트 해시입니다. 각 항목은 16바이트 랜덤 솔트와 비용을 내장하므로 동일한 비밀번호도 다른 해시를 생성합니다. 참고: bcrypt는 비밀번호를 72바이트에서 잘라냅니다 — 그 이상의 문자는 무시됩니다.
- apr1 (Apache MD5)
- Apache의 반복적 솔트 MD5 변형($apr1$ + 8자 솔트)입니다. 1,000번의 MD5 라운드를 실행하며 bcrypt의 적응형 비용보다 훨씬 약하지만, Apache와 nginx가 기본으로 구현하여 플랫폼과 베이스 이미지에서 가장 이식성 높은 형식입니다.
- SHA-1 및 crypt
- SHA-1 항목({SHA} + base64 다이제스트)은 솔트가 없어 동일한 비밀번호가 동일한 해시를 생성하고 레인보우 테이블에 취약합니다 — 레거시 호환성 목적으로만 포함됩니다. 전통적인 crypt (DES)는 더욱 약하고 비밀번호를 8자에서 무음으로 잘라냅니다.
- 솔트 및 반복
- 솔팅은 모든 해시를 고유하게 만들어 사전 계산된 (레인보우 테이블) 공격을 방지합니다. bcrypt는 설정 가능한 비용과 함께 128비트 랜덤 솔트를 사용하며, apr1은 1,000번의 고정 반복과 8자 솔트를 사용합니다. 솔트 재생성으로 동일한 비밀번호에 대한 다른 유효한 해시를 생성할 수 있습니다.
- Base64 및 UTF-8 처리
- 비밀번호는 해시 전에 UTF-8 바이트로 인코딩되므로 비ASCII 문자가 일관되게 처리됩니다. Authorization: Basic 헤더는 원시 UTF-8 username:password 바이트의 base64이며, 서버가 수신 측에서 디코딩하는 것과 일치합니다.
- 주의사항 및 한계
- 생성된 해시는 로컬에서 계산되며 라이브 서버에서 검증되지 않습니다. 복사된 항목과 다운로드된 .htpasswd 파일은 평문 해시 형태로 클립보드와 디스크에 저장됩니다 — 비밀처럼 취급하고, 파일 권한을 제한하며, 운영 설정에 붙여넣은 후 클립보드를 지우세요.
모범 사례
- 지원되는 곳이라면 bcrypt를 우선 사용하세요
- Apache, Docker, Caddy, Traefik에는 bcrypt ($2y$)를 사용하세요 — 솔트 기반, 적응형이며 apr1이나 SHA-1보다 훨씬 강력합니다. nginx에서 시스템 crypt()에 대한 bcrypt 의존성이 불안정할 때만 apr1을 사용하세요.
- 파일을 웹 루트 외부에 저장하세요
- .htpasswd를 제공 디렉토리 외부에 보관하여 HTTP로 다운로드되지 않도록 하세요. chmod 640을 설정하고 웹 서버 사용자가 소유하도록 하여 서버는 읽을 수 있지만 다른 계정은 접근할 수 없게 하세요.
- 항상 HTTPS를 통해 제공하세요
- Basic Auth는 모든 요청에 자격증명을 역방향 base64로 전송합니다. TLS 없이는 네트워크 경로의 누구나 비밀번호를 읽을 수 있습니다. 평문 HTTP에서는 절대 Basic Auth를 활성화하지 마세요 — 보호된 엔드포인트 앞에서 TLS를 종료하세요.
- 고유하고 강력한 비밀번호를 사용하세요
- 각 계정마다 서비스 간에 재사용하지 않는 고엔트로피 비밀번호를 가져야 합니다. 랜덤 비밀번호 생성기로 생성하고 직접 만드는 대신 비밀번호 관리자에 저장하세요.
자주 묻는 질문
bcrypt vs apr1 — 어떤 것을 선택해야 할까요?
nginx는 bcrypt를 지원하나요?
nginx 오류 `crypt_r() failed (22: Invalid argument)`를 어떻게 해결하나요?
.htpasswd 파일은 어디에 두고 권한은 어떻게 설정해야 하나요?
.htaccess / nginx에서 Basic Auth를 어떻게 설정하나요?
비밀번호가 어딘가에 업로드되나요?
bcrypt의 $2a$, $2b$, $2y$ 접두사의 차이는 무엇인가요?
bcrypt 비용은 얼마로 설정해야 하나요?
htpasswd와 Authorization: Basic 헤더의 차이는 무엇인가요?
apache2-utils가 설치되어 있지 않을 때 htpasswd 항목을 어떻게 생성하나요?
htpasswd 플래그 -B, -Bbn, -bnB는 어떤 의미인가요?
Docker Registry가 bcrypt를 필요로 하는 이유는 무엇인가요?
Basic Auth는 보안적으로 안전한가요?
관련 도구
모든 도구 보기 →cURL 명령어 생성기 & 빌더
웹 & API
온라인 curl 명령어 생성기. 메서드·헤더·인증·바디를 설정하면 즉시 복사 가능한 명령어가 생성됩니다. Bearer·POST JSON·파일 업로드 프리셋. 무료, 서버 전송 없음.
진법 변환기 (Number Base Converter)
변환 도구
2진수, 16진수, 10진수, 8진수 및 임의 진법(2-36)을 즉시 변환합니다. 온라인에서 무료로 사용할 수 있으며 모든 처리는 브라우저에서 이루어집니다.
Base64 디코더 · 인코더 (Base64 Decoder & Encoder)
인코딩 & 포매팅
Base64를 온라인에서 무료로 인코딩하고 디코딩합니다. UTF-8과 이모지를 완벽 지원하는 실시간 변환으로, 100% 브라우저에서 처리되어 회원 가입이 필요 없습니다.
대소문자 변환기 — UPPERCASE, lowercase, camelCase
텍스트 도구
UPPERCASE, lowercase, camelCase, snake_case, kebab-case 등 15가지 형식으로 텍스트를 즉시 변환합니다. 무료 온라인 도구, 가입 불필요, 브라우저에서 동작.
색상 변환기 — HEX, RGB, HSL, OKLCH
변환 도구
HEX, RGB, HSL, OKLCH, OKLAB, CMYK 등 9가지 색상 형식을 브라우저에서 즉시 변환합니다. 무료 온라인 도구, 가입 불필요.
crontab 생성기 & cron 표현식 빌더
날짜 & 시간
브라우저에서 cron 표현식을 만들고 검증·해석합니다. 로컬 또는 UTC로 다음 실행을 미리 보고, POSIX 5필드 문법과 프리셋을 온라인에서 무료로 사용합니다.