LabHub
배우기 러닝패스 코스

統合とデプロイ

401と403、そして証明書

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

401 과 403 을 단서로 인증 문제의 계층을 좁히고, 인증서 실패 모드를 파일에서 직접 확인할 수 있게 됩니다.

왜 중요한가

401 은 인증 실패입니다 — "네가 누구인지 확인할 수 없다". 403 은 인가 실패입니다 — "누구인지는 알겠는데 이건 못 하게 돼 있다". 이 구분이 조사 방향을 정반대로 가릅니다. 401 이면 자격 증명 자체를 보고, 403 이면 자격 증명은 건드릴 필요 없이 권한 설정을 봅니다. "권한 오류" 라고 뭉뚱그리면 엉뚱한 쪽을 몇 시간 팝니다.

그리고 401 안에서도 이유가 갈립니다. 토큰 없음, 알 수 없는 토큰, 만료된 토큰이 전부 401 이지만 대응이 다르므로 응답 본문의 사유 문자열을 함께 봐야 합니다.

인증서 쪽에서는 두 가지를 확인합니다. 만료는 notAfter 로 보는데, 이때 현재 시각도 함께 찍어야 합니다 — 시계가 틀린 클라이언트에서 멀쩡한 인증서가 만료로 보이는 일이 상당히 많기 때문입니다. 이름 불일치는 CN 이 아니라 SAN 을 봐야 하지만, 이 실습의 인증서는 CN 만 가지고 있으므로 주체 이름으로 확인합니다.

토큰 네 가지(헤더 없음), expired-token-2025, readonly-token, fde-prod-2026 인증서 두 개/opt/data/tls/expired.pem, /opt/data/tls/wronghost.pem (접속하려던 이름은 api.customer.example)

단계

  1. /opt/app/authapi.py 를 실행해 127.0.0.1:8003/public 이 200 을 반환하게 만드세요.
  2. Authorization 헤더 없이 /private 를 호출한 상태 코드를 /root/auth/no_token.txt 에 적으세요.
  3. expired-token-2025/private 를 호출한 응답 본문/root/auth/expired_reason.txt 에 저장하세요.
  4. readonly-token 으로 /private 를 호출한 상태 코드를 /root/auth/readonly.txt 에 적으세요.
  5. fde-prod-2026 으로 /private 를 호출한 상태 코드를 /root/auth/ok.txt 에 적으세요.
  6. expired.pem 의 만료일을 /root/auth/cert_expiry.txt 에 저장하세요.
  7. wronghost.pem 의 주체 이름을 /root/auth/cert_cn.txt 에 저장하세요.
  8. /root/auth/report.md 에 401 과 403 의 차이, 그리고 두 인증서의 문제를 정리하세요. 두 상태 코드와 api.other.example, 만료 연도가 들어가야 합니다.

참고

인증 게이트웨이 띄우기

/opt/app/authapi.py 를 실행해 127.0.0.1:8003/public 이 200 을 반환하게 만드세요.

/opt/app/authapi.py 를 실행하면 127.0.0.1:8003 에서 대기합니다. /public 은 인증 없이 열려 있습니다.

토큰 없이 호출해 보기

Authorization 헤더 없이 /private 를 호출한 상태 코드를 /root/auth/no_token.txt 에 적으세요.

Authorization 헤더 없이 /private 를 부르면 어떤 코드가 오는지 기록하세요.

만료 사유 확보하기

expired-token-2025/private 를 호출한 응답 본문/root/auth/expired_reason.txt 에 저장하세요.

만료 토큰도 401 입니다. 상태 코드만으로는 이유를 모르니 응답 본문을 저장하세요.

권한 부족 확인하기

readonly-token 으로 /private 를 호출한 상태 코드를 /root/auth/readonly.txt 에 적으세요.

readonly-token 은 신원 확인은 통과합니다. 그때 나오는 코드가 401 과 어떻게 다른지 보세요.

정상 인증 확인하기

fde-prod-2026 으로 /private 를 호출한 상태 코드를 /root/auth/ok.txt 에 적으세요.

fde-prod-2026 토큰이면 통과합니다. 성공 코드를 기록하세요.

만료된 인증서 확인하기

expired.pem 의 만료일을 /root/auth/cert_expiry.txt 에 저장하세요.

openssl x509 로 인증서의 유효 기간을 볼 수 있습니다. 만료일이 언제인지 저장하세요.

이름이 다른 인증서 확인하기

wronghost.pem 의 주체 이름을 /root/auth/cert_cn.txt 에 저장하세요.

wronghost.pem 의 주체 이름을 뽑으세요. 접속하려던 이름과 다릅니다.

진단 보고서 쓰기

/root/auth/report.md 에 401 과 403 의 차이, 그리고 두 인증서의 문제를 정리하세요. 두 상태 코드와 api.other.example, 만료 연도가 들어가야 합니다.

401 과 403 이 각각 무엇의 실패인지, 그리고 두 인증서의 문제가 무엇인지 정리하세요.